Bonjour,
étant très têtue … je reviens sur ce sujet. Je vais essayer de m’exprimer plus clairement.
Lorsque l’on a dans un modèle un paramètre appelè " letexte" et que dans la valeur de ce paramètre on veut mettre un autre modele par exemple ou <doc4|left> cela ne marche pas.
si on met : |letexte= un beau <doc4> chat| dans le modele
avec [(#ENV*{letexte})]
on on a : un beau chat
le code généré :
un beau chat
avec [(#ENV*{letexte}|propre)]
on a l’image à la bonne place. et le texte est correct
avec [(#ENV{letexte})]`on a : un beau chat
le code généré est : un beau chat
2- si on met |letexte= un beau <doc4|left> chat|
avec [(#ENV*{letexte})]
on obtient : un beau
code généré <doc4 <=« » div=« »>
avec [(#ENV*{letexte}|propre)] un beau <doc4
avec [(#ENV{letexte})]`on a :un beau <doc4
je voudrais mettre un traitement dans un filtre ou pre_propre pour récuperer ce modèle doc avec plusieurs paramètres et si possible l’utiliser pour des modèles perso. <doc4|left|largeur=200|hauteur=300>
mais si je met #ENV* {letexte} j’ai deja perdu la fin du parametre. …avez vous une idée ?
Salut,
J’ai eut le même genre de problème et j’étais passé par un autre séparateur pour ce genre de modèle.
<modele | texte = blabla <doc@truc@muche> blabla>
Puis une fonction qui remet ça en ordre :
// permet l'inclusion de modèle dans un modèle
function modele_separateur_alt($p,$id_article,$separateur="@") {
// Si le texte contient articleXX peupler le texte avec celui de l'article en question
preg_match('/(article)\w\d+/',$p,$matches);
if($matches[1] == 'article') {
$array = explode('article',$matches[0]);
$id = intval($array[1]);
$id_article = intval($id_article);
// Éviter l'appel d'un article sur soi-même (boucle infinie) ou la valeur 0.
if ($id !== $id_article && $id > 0) {
$p = generer_objet_info($id,'article','texte');
}
}
// Sinon fonctionnement normal, vérifier la présence de @ et remplacer par |
else {
$p = str_replace($separateur,'|',$p);
}
return $p;
}
J’ai plusieurs sites avec les mêmes squelettes/plugins.
Les rédacteurs utilisent inserer_modele qui met des |
pour doc ou img je peux leur dire d’utiliser @ et mettre un filtre c’est une solution si il n’y a pas trop de paramètres.
mais il vaudrait mieux générer automatiquement ces @ avec un filtre « cachersousmodele ». C’est ce que je n’arrive pas à faire.
<modele | texte = blabla <barre|texte=coucou|bord#ffffff=|fond=#ffffff> fin du texte du premier modele>
je me demande si il ne suffirait pas que dans spip, avant de récupérer les paramètre d’un modèle, spip regarde s’il n’y a pas de < .| .> a l’intérieur de ce modèle et dans ce cas remplace automatiquement les |par @ a l’intérieur de ces <…> … bon c’est peut être compliqué.
en attendant, je vais mettre un filtre montrerpipe pour @ cela permettra déjà de traiter doc et img. Cela marche pour tous les sous modeles mais je n’ai pas confiance aux redacteurs pour mettre correctement les @.
Oui j’utilise Aide par Objet - SPIP-Contrib en leur mettant des exemples tout prêt à copier coller et adapter (on doit pouvoir le faire aussi via la barre typo)
je re formule.
si texte est un paramètre d’un modèle .
je sais transformer texte= <doc4|left|largeur=400> en par exemple debdoc4@left@largeur=400fin ou <doc4@left@largeur=400>
si je place cette transformation dans pre_propre j’ai toujours « un beau <doc4 »
mais si dans pre_propre je met directement $texte= <doc4|left|largeur=400>
en sortie je récupère bien debdoc4@left@largeur=400fin. Donc la disparition du texte situé après <doc4 qui s’effectue au premier | s’effectue AVANT PRE_PROPRE idem pour PRE_TYPO
quelqu’un saurait il
OU et QUAND avec [(#ENV*{letexte}|propre)] un beau <doc4 **|letexte= un beau <doc4|left> chat|** devient un beau <doc4 ?
y a un pipeline ou l’on peut intervenir ?
merci