je suis coincé: je cherche à insérer dans le block "imageInfos" en dernière position un tpl pour ça je fais
$search = '</div></div>{if isset($COMMENT_COUNT)'; $replace = '<div id="PaypalPerso" class="imageInfo">{$PAYPALPERSO_CONTENT}</div>'.$search; return str_replace($search, $replace, $content); }
mais ça ne fonctione pas!
le premier </div> de $search ferme <div id="imageInfo">;
le deuxième <div id=theImageAndInfos>
le problème viens de $search qui est mal renseigné, j'ai testé plusieurs trucs sans succès :je sèche
Hors ligne
Bonjour,
je pense que c'est sur la page picture
je te conseils de regarder addinfo qui ajoute une info dans le tableau (ou [extension by ddtddt] Photo Added by )
Hors ligne
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
Hors ligne
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
Hors ligne
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
Hors ligne
$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
Hors ligne
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 ....
Hors ligne
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)
Dernière modification par Miklfe (2014-02-05 22:43:47)
Hors 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
Hors ligne
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*
Hors ligne