Bonjour,
J'espère que je poste au bon endroit, c'est mon premier post. Bon voila, j'ai un projet d'application web dans lequel on utilise des templates qui sont utilisés pour l'affichage.
donc un fichier template nommé layout.php
A l'interieur de ce fichier on peut definir des blocs de ce genre:
ensuite je peut avoir un fichier editer.view.php dans lequel j'appel le layout définit. A l'interieur de editer.view.php je peux avoir aussi des blocs de ce genre:[%bblock nom_du_bloc %]
--on met du javascritp ou du html ou tu texte ou les trois-->[%bblock nom_du_bloc %]
les noms de bloc doivent correspondre dans les deux fichiers.[%eblock%]
l'idée est de parser le fichier layout.php et de remplacer tous les [%bblock nom_du_bloc %] par le contenu qui se trouve entre les blocs [%bblock nom_du_bloc %][%eblock%] se situant dans editer.view.php portant le même nom de blocs.
J'ai utiliser les expression regulieres de cette facon:
Cela marche sauf qu'il prend le premier [%bblock] et le dernier [%eblock%] qui se trouve dans editer.view.php en incluant les autres [%bblock][%eblock%]. Au final, je n'ai pas plusieurs ligne de block mais une seule:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $pattern_central="[\w<>\.\/'\"=\s\[\]\éàù\$\^*\\\#();%]"; $pattern="/\[%bblock \s*([\w]+)\s*%\](".$pattern_central.")\[%eblock%\]/i";
résultat avec un var_dump($blocks) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 preg_match_all($pattern,"[%bblock d1%]<br><br><br>[%eblock%]" . "[%bblock d2%]salut[%eblock%]" . "[%bblock d3 %]<b>lit</b>* \#(); ] 100% % ['<a href='../lien'>lien</a>[%eblock%]" . "[%bblock d4%]<b>lm</b>* \#(); 100 ] <a href='../hydro'>lien</a>[%eblock%]" . "[%bblock d5%][toto][%eblock%]" ,$blocks,PREG_SET_ORDER);
j'ai le nom en indice 1 et le contenu de mon $2 qui contient les autres bblock et eblock.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 array 0 => array 0 => string '[%bblock d1%]<br><br><br>[%eblock%][%bblock d2%]salut[%eblock%][%bblock d3 %]<b>lm</b>* \#(); ] 100 sd'['<a href='../hydro'>lien</a>[%eblock%][%bblock d4%]<b>lm</b>* \#(); 100 ] <a href='../hydro'>lien</a>[%eblock%][%bblock d5%][toto][%eblock%]' (length=244) 1 => string 'd1' (length=2) 2 => string '<br><br><br>[%eblock%][%bblock d2%]salut[%eblock%][%bblock d3 %]<b>lm</b>* \#(); ] 100 sd'['<a href='../hydro'>lien</a>[%eblock%][%bblock d4%]<b>lm</b>* \#(); 100 ] <a href='../hydro'>lien</a>[%eblock%][%bblock d5%][toto]' (length=221)
si j'enlève le % en fin de mon $pattern_central (ci dessus, plus haut)ca marche sauf que je ne peux plus utiliser de %, sinon il trouve que le caractère n'est pas prise en compte.
essai sans le %:
En gros c'est un système de ce genre que je veux faire à savoir:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 array 0 => array 0 => string '[%bblock d1%]<br><br><br>[%eblock%]' (length=35) 1 => string 'd1' (length=2) 2 => string '<br><br><br>' (length=12) 1 => array 0 => string '[%bblock d2%]salut[%eblock%]' (length=28) 1 => string 'd2' (length=2) 2 => string 'salut' (length=5) 2 => array 0 => string '[%bblock d3 %]<b>lm</b>* \#(); ] 100 sd'['<a href='../hydro'>lien</a>[%eblock%]' (length=79) 1 => string 'd3' (length=2) 2 => string '<b>lm</b>* \#(); ] 100 sd'['<a href='../hydro'>lien</a>' (length=55) 3 => array 0 => string '[%bblock d4%]<b>lm</b>* \#(); 100 ] <a href='../hydro'>lien</a>[%eblock%]' (length=73) 1 => string 'd4' (length=2) 2 => string '<b>lm</b>* \#(); 100 ] <a href='../hydro'>lien</a>' (length=50) 4 => array 0 => string '[%bblock d5%][toto][%eblock%]' (length=29) 1 => string 'd5' (length=2) 2 => string '[toto]' (length=6)
parser le fichier layout.php et de remplacer tous les [%bblock nom_du_bloc %] par le contenu qui se trouve entre les blocs [%bblock nom_du_bloc %][%eblock%] se situant dans editer.view.php portant le même nom de blocs.Que ce contenu soit du un melange de tag html,javascrip,css ou pas, et sans que je ne soit obligé d'eviter de saisir certains caractères
Est-ce possible?
Si je suis sur la mauvaise piste, indiquez moi le bon chemin.
S'il y a une autre façon de gérer ce genre de script (a savoir remplacer une balise par le contenu d'une autre, enfin un truc de ce genre), plus simplement, je suis preneur.
C'est en php.
Merci d'avance
Partager