plg a écrit:
Tu as un lien pour que je relise cette discussion ? Tout ce qui peut faciliter la vie des développeur de plugins est bon à prendre ! On voit bien ici que les expressions régulières sont parfois trop compliquées à écrire :-/
Bonjour,
J'ai lu une fois une discussion concernant l'utilisation des triggers mais je ne la trouve plus, et personnellement, dans 90% des cas, je galère à trouver le bon trigger surtout lorsque les fichiers sont imbriqués...
Pour en revenir au preg_match ou preg_replace, le truc cool sous php c'est qu'on est pas obligé d'utiliser le / pour baliser ce qui oblige d'utiliser des \ dans les strings pour échapper les / et dieu sait s'il y en a parfois beaucoup ... Perso j'utilise le ~ pour les balises, ce qui me permet de ne plus échapper les / et rend le code plus facile à comprendre.
@+ ;)
mistic100 a écrit:
c'est pour ça que j'avais proposé d'ajouter des "marqueurs" dans le template, du genre
{* loc_end_picture_metadata *}
histoire de faire des str_replace plus simplement, mais ça avait reçu un accueil mitigé, selon quoi c'est une solution un peu crade pour un problème de conception de notre système de template
Tu as un lien pour que je relise cette discussion ? Tout ce qui peut faciliter la vie des développeur de plugins est bon à prendre ! On voit bien ici que les expressions régulières sont parfois trop compliquées à écrire :-/
il y en a cinq dans le genre dans plugin_language_analysis si tu veux encore te faire mal
mistic100 a écrit:
Code:
#translate_dec:(?:\\\\{0,1})(?:["\']{1})(.*?)(?:\\\\{0,1})(?:["\']{1}):(?:\\\\{0,1})(?:["\']{1})(.*?)(?:\\\\{0,1})(?:["\']{1})}#(j'aime bien montrer cette mocheté)
*yeux qui saignent*
exact
en fait ici les retour à la ligne?
les parenthèses (non échappée) récupèrent des morceaux de la chaine originale
le $1, $2, etc. permettent des les réutiliser dans la chaine de remplacement
c'est les mêmes que tu as dans le tableau $matches quand tu fais un preg_match
en tout cas très bon cour sur openclassrooms, même si pour moi ça reste vachement hard.
juste comme ça: à quoi servent $1 et $2 pour $replace (sans ça marche aussi)
(et sinon chapeau pour skeleton c'est top)
#translate_dec:(?:\\\\{0,1})(?:["\']{1})(.*?)(?:\\\\{0,1})(?:["\']{1}):(?:\\\\{0,1})(?:["\']{1})(.*?)(?:\\\\{0,1})(?:["\']{1})}#
(j'aime bien montrer cette mocheté)
haaa les regex !! que du boon !! Bon pour ce qu'on en fait ça va, ça reste faisable, mais parfois prise de tête et quand même au bout d'un moment on commence à avoir mal aux yeux, et halluciner ou oublier des caractères ....
HOHOHO génial un grand MERCI
$search = '#</div>(\s*)</div>(\s*){if isset\(\$COMMENT_COUNT\)}#s'
j'avais oublié d'échapper les parenthèse (en plus du $)
et c'est * pas ? pour matcher tout ou rien (? c'est rien ou une seule et unique fois)
j'ai mit les \s dans des parenthèse, ça permet de les récupérer et de le réinjecter (pour pas modifier le template)
$replace = '<div id="PaypalPerso" class="imageInfo">{$PAYPALPERSO_CONTENT}</div> </div>$1</div>$2{if isset(\$COMMENT_COUNT)}';
il y a un très bon cours sur le regex sur openclassrooms
Merci à vous deux pour la réponse
du coté de addInfo les info sont ajouté avant l'info choisi (au mieux le block est en avant dernier.
La première soluce de mistic fonctionne c'est ok,! Mais l'argument pour preg_replace ma convaincu et la ça se complique puisque je n'arrive pas à la passer en l'état
j'ai essayé sans succès:
$search = '#</div>[\s]?</div>[\s]?{if isset($COMMENT_COUNT)}#s'; $search = '#<\/div>[\s]?<\/div>[\s]?{if isset($COMMENT_COUNT)}#s'; $search = '#<\/div>[\s]?<\/div>[\s]?{if isset(\$COMMENT_COUNT)}#s'; $search = '#<\/div>[\s]?<\/div>[\s]?\{if isset(\$COMMENT_COUNT)\}#s';
bref je galère
c'est pour ça que j'avais proposé d'ajouter des "marqueurs" dans le template, du genre
{* loc_end_picture_metadata *}
histoire de faire des str_replace plus simplement, mais ça avait reçu un accueil mitigé, selon quoi c'est une solution un peu crade pour un problème de conception de notre système de template
regarde la doc de str_replace
ça matche la string EXACTEMENT, avec les retours à la ligne etc
si tu veux être compatible avec le picture.tpl du template par defaut ça sera
$search = '</div> </div> {if isset($COMMENT_COUNT)}';
et le sauts de ligne sont des \n, pas des \r\n, il faut vérifier ça dans ton fichier .php en affichant les caractères non imprimables
MAIS selon les template, la structure change un peu (ça tu dois le savoir :) )
donc il vaut mieux utiliser preg_replace dans ce cas
$search = '#</div>[\s]?</div>[\s]?{if isset($COMMENT_COUNT)}#s';
\s matche les "white spaces", et le modificateur s active la recherche multiligne
eh oui, c'est chiant