Bonjour à tous et à toutes,
Je réalise en ce moment un petit moteur de templates pour un site et j'ai un problème pour la gestion des blocs.
Voici la méthode assigner:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <?php public function assigner($nom_var, $valeur_var) { $this->tab_var[$nom_var] = $valeur_var; // Toute les variables a transmettre au tpl sont donc contenu dans un tableaux associatifs } ?>
et la fonction de parsage:
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 <?php public function chargerTPL($templatenom) { $this->page .= file_get_contents('vues/templates/'.$templatenom.'.tpl'); foreach($this->tab_var as $cle => $valeur) { if(is_array($valeur)) { foreach($valeur as $cle2 => $valeur2) { //Gestion des blocs $cherche = '<bloc nom="'.$cle.'"> {%{'.$cle2.'}} [:alnum:] </bloc>'; $remplacement = '<bloc nom="'.$cle.'"> [0-9a-zA-Z] {%{'.$valeur2.'}} [:alnum:] </bloc>'; } } else { $cherche = '{%{'.$cle.'}}'; $remplacement = $valeur; } $this->page = preg_replace($cherche, $remplacement, $this->page); } } ?>
Donc les variables simple s'écrive sous la forme %{variable}:
exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <?php //dans le php: $page->assigner('var_test', $test); //dans le tpl: %{var_test} ?>
et les variables tableaux doivent etre écris sous la formes: <bloc nom='le nom de la variable'> bla bla %{le nom de la cle} </bloc>
exemple:
J'ai donc tenter de faire un $cherche sous la forme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <?php //dans le php: $page->assigner('var_test', array('titre'=>'Ma news','contenu' => 'blabla'); //dans le tpl: ?> <bloc nom='var_test'> La news 1 se nomme: %{titre} et son contenu est: %{contenu} </bloc>
Sauriez vous quelle expression régulière je dois utiliser ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <?php $cherche = '<bloc nom="'.$cle.'"> [:alnum:] {%{'.$cle2.'}} [:alnum:] </bloc>'; ?>
Merci d'avance !
Partager