Modèle dans parametre d'un modèle ?

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
    d1

  • avec [(#ENV*{letexte}|propre)]

    on a l’image à la bonne place. et le texte est correct

    le code généré est

<p>un beau</p>
<div class='spip_document_4 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'>
<figure class="spip_doc_inner">
 <a href="../IMG/jpg/papagemo2.jpg" class="spip_doc_lien mediabox" type="image/jpeg">
		<img src='../IMG/jpg/papagemo2.jpg?1737658188' width='768' height='1026' alt='' /></a>
</figure>
</div> 
<p>chat</p>

  • avec [(#ENV{letexte})]`on a : un beau chat
    le code généré est : un beau chat
    d3

2- si on met |letexte= un beau <doc4|left> chat|

  • avec [(#ENV*{letexte})]
    on obtient : un beau
    code généré <doc4 <=«  » div=«  »>
    docZ

  • avec [(#ENV*{letexte}|propre)] un beau <doc4
    doca

  • avec [(#ENV{letexte})]`on a :un beau <doc4
    doca

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;
}

Et son application dans un fichier modele :

…
[<div>(#TEXTE|modele_separateur_alt{id_article=#ENV{id_article}}|propre)</div>]
…

Attention cette fonction fait un peu plus que juste remplacer @ par |, ce qui concerne ton questionnement se trouve en fin de fonction, dans le else

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