Annonce

Écrire une réponse

Veuillez écrire votre message et l'envoyer

Cliquez dans la zone sombre de l'image pour envoyer votre message.

Retour

Résumé de la discussion (messages les plus récents en premier)

barbichou
2014-01-18 11:15:21

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.

@+ ;)

plg
2014-01-18 10:50:11

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 :-/

mistic100
2014-01-16 15:54:01

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

flop25
2014-01-16 15:44:01

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*

mistic100
2014-01-16 15:43:33

exact

Miklfe
2014-01-16 15:39:37

en fait ici les retour à la ligne?

mistic100
2014-01-16 15:35:12

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

Miklfe
2014-01-16 15:31:34

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)

mistic100
2014-01-16 14:44:15

Code:

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

(j'aime bien montrer cette mocheté)

flop25
2014-01-16 14:24:40

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 ....

Miklfe
2014-01-16 00:01:59

HOHOHO génial un grand MERCI

mistic100
2014-01-15 23:57:46

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

Miklfe
2014-01-15 23:35:57

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

mistic100
2014-01-15 09:49:31

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

mistic100
2014-01-15 09:44:39

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

Pied de page des forums

Propulsé par FluxBB

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