|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : septembre 2004 Messages : 43 ![]() |
Bonjour,
J'utilise un mini système de méta-code pour un templating. Voici un exemple de méta-code : {site:color:bg} ou encore {page:title} Pour remplacer tout cela par ce que je souhaite j'ai un petit regex qui utilise preg_replace avec le flag e afin de remplacer tout cela par la valeur d'une variable créée plus haut. Exemple {site:title} => $site['title'] Donc un preg_replace('/.../e', '$$1[$2]', $template); fonctionne très bien quand j'ai un méta-code du style : {site:title}. Le problème se pose justement quand le dernier groupe ($3) n'existe pas, puisqu'il est facultatif. Le but recherché c'est de faire : si le groupe $3 ({site:color:bg}) existe il me cherche la variable $$1[$2][$3] mais s'il y a uniquement deux groupes ({site:title}) il me fait ceci : $$1[$2]. J'ai pensé en faisant un ($3) ? $$1[$2][$3] : $$1[$2] mais ça fonctionne pas, puisque si le groupe $3 n'existe tout simplement pas, la variable n'existe pas... Si quelqu'un à déjà eu le problème et qu'il a la solution je suis preneur :-D Merci d'avance, Bonne soirée. |
|
|
00
|
|
|
#2 | ||
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
Cela sera certainement plus facile à gérer avec une fonction de callback (preg_replace_callback). Vous pourrez ainsi faire tout le nécessaire dont le test (isset) de votre troisième parenthèse capturante.
Code :
|
||
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : septembre 2004 Messages : 43 ![]() |
Hello Julp,
Crétin que je suis, j'avais pas vu cette fonction dans la doc (faut dire que je suis pas allé tout en bas -___-'). J'ai en effet utilisé preg_replace_callback avec create_function parce que je suis dans une class et vraisensablement le $this-> veut pas passer :-) Du coup ça fonctionne Pico bello ! Merci encore, Salutations |
|
|
00
|
|
|
#4 |
|
Invité régulier
![]() Inscription : septembre 2004 Messages : 43 ![]() |
Hello,
Je me permet de revenir car j'ai un toujours un souci avec ça. Maisje pense que ça vient plus de ma fonction callback. Elle se présente comme ceci : Code :
create_function('$m', 'return (!isset($[3])) ? ${$m[1]}[$m[2]] : ${$m[1]}[$m[2]][$m[3]];') Au départ j'avais pensé que c'était parce que la variable n'était pas globale, j'ai donc ajouté un global ${$m[1]}; avant le return mais ça fonctionne pas.. Le pire c'est que j'ai aucune erreur (error_display(E_ALL)). J'ai également essayé avec le $GLOBALS, mais toujours aucune valeur de retour, qui j'en suis sûr il y en a, car si je fais un print_r de $site (par exemple) j'ai bien le contenu de ma variable. Est-ce que tu penses que c'est à cause du fait que mon regex soit dans une class ? Merci encore d'avance Salutations |
|
|
00
|
|
|
#5 | ||
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
Sans erreur de syntaxe ça fonctionnera mieux
Code :
|
||
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Inscription : septembre 2004 Messages : 43 ![]() |
Hop,
J'ai fais une erreur de syntaxe ? Si oui tu peux me dire ou, parce que perso je ne vois vraiment pas :-/ Merci d'avance |
|
|
00
|
|
|
#7 |
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
Code :
return (!isset($m[3])) ? ${$m[1]}[$m[2]] : ${$m[1]}[$m[2]][$m[3]];
|
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Inscription : septembre 2004 Messages : 43 ![]() |
Sinon, je suis un peu septique quand à l'utilisation du $GLOBALS, c'est pas très sécuritaire non ? Merci d'avance |
|
|
00
|
|
|
#9 | |
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
Citation:
|
|
|
|
00
|
|
|
#10 |
|
Invité régulier
![]() Inscription : septembre 2004 Messages : 43 ![]() |
Hello,
Désolé pour le retard de ma réponse. J'ai tout de même réussi à le faire sans utiliser le $GLOBALS :-) Je viens de me rendre compte, que si j'avais lu les commentaires de la fonction preg_replace_callback j'aurais pu trouver la solution (puisque quelqu'un à eu le même problème et donner un bout de solution). Néanmoins, il y a un aspect que je comprend pas très très bien, c'est le array avec $this et callback, il va faire quoi avec les deux valeurs ? Merci d'avance |
|
|
00
|
|
|
#11 |
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
La notation tableau dont le premier élément est un objet ou le nom d'une classe et dont le deuxième élément est le nom de la méthode permet respectivement de faire appel à une méthode et à une méthode statique. Sans cela vous seriez limiter à appeler de simples fonctions.
|
|
|
00
|
|
|
#12 |
|
Invité régulier
![]() Inscription : septembre 2004 Messages : 43 ![]() |
Ben bien le merci pour ces éclaircissement :-) On arrive enfin au bout !
Bonne continuation ! A+ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com