#1 2014-01-15 01:14:08

Miklfe
Membre
Sarthe
2010-11-13
364

[Résolu] str_replace

je suis coincé: je cherche à insérer dans le block "imageInfos" en dernière position un tpl pour ça je fais

Code:

$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

#2 2014-01-15 06:38:24

ddtddt
Équipe Piwigo
Quetigny (21) - France
2007-07-27
16915

Re: [Résolu] str_replace

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 )


Vous aimez Piwigo alors n'hésitez pas à participer avec nous, plus d'infos sur la page "Contribuer à Piwigo". Si vous n'avez pas beaucoup de temps et que vous souhaitez nous soutenir vous pouvez aussi le faire par un don.

Hors ligne

#3 2014-01-15 09:44:39

mistic100
Ex Equipe Piwigo
Lyon
2008-09-27
3561

Re: [Résolu] str_replace

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

Code:

$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

Code:

$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

#4 2014-01-15 09:49:31

mistic100
Ex Equipe Piwigo
Lyon
2008-09-27
3561

Re: [Résolu] str_replace

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

#5 2014-01-15 23:35:57

Miklfe
Membre
Sarthe
2010-11-13
364

Re: [Résolu] str_replace

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:

Code:

$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

#6 2014-01-15 23:57:46

mistic100
Ex Equipe Piwigo
Lyon
2008-09-27
3561

Re: [Résolu] str_replace

Code:

$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)

Code:

$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

#7 2014-01-16 00:01:59

Miklfe
Membre
Sarthe
2010-11-13
364

Re: [Résolu] str_replace

HOHOHO génial un grand MERCI

Hors ligne

#8 2014-01-16 14:24:40

flop25
Équipe Piwigo
2006-07-06
6544

Re: [Résolu] str_replace

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

#9 2014-01-16 14:44:15

mistic100
Ex Equipe Piwigo
Lyon
2008-09-27
3561

Re: [Résolu] str_replace

Code:

#translate_dec:(?:\\\\{0,1})(?:["\']{1})(.*?)(?:\\\\{0,1})(?:["\']{1}):(?:\\\\{0,1})(?:["\']{1})(.*?)(?:\\\\{0,1})(?:["\']{1})}#

(j'aime bien montrer cette mocheté)

Hors ligne

#10 2014-01-16 15:31:34

Miklfe
Membre
Sarthe
2010-11-13
364

Re: [Résolu] str_replace

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

#11 2014-01-16 15:35:12

mistic100
Ex Equipe Piwigo
Lyon
2008-09-27
3561

Re: [Résolu] str_replace

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

#12 2014-01-16 15:39:37

Miklfe
Membre
Sarthe
2010-11-13
364

Re: [Résolu] str_replace

en fait ici les retour à la ligne?

Hors ligne

#13 2014-01-16 15:43:33

mistic100
Ex Equipe Piwigo
Lyon
2008-09-27
3561

Re: [Résolu] str_replace

exact

Hors ligne

#14 2014-01-16 15:44:01

flop25
Équipe Piwigo
2006-07-06
6544

Re: [Résolu] str_replace

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

#15 2014-01-16 15:54:01

mistic100
Ex Equipe Piwigo
Lyon
2008-09-27
3561

Re: [Résolu] str_replace

il y en a cinq dans le genre dans plugin_language_analysis si tu veux encore te faire mal

Hors ligne

Pied de page des forums

Propulsé par FluxBB

github twitter newsletter Faire un don Piwigo.org © 2002-2024 · Contact