Comment déclarer un modèle pour le plugin “Insérer Modèles”

On décrit le formulaire permettant de saisir les arguments d’un modèle monmodele à l’aide d’un fichier YAML à placer dans le répertoire modeles/.

Dans les cas simples, ce fichier YAML aura le même nom que le modele HTML, mais ce ne sera pas nécessairement le cas puisque différentes configurations d’un même fichier HTML peuvent être décrites par différents fichiers YAML.

Ce fichier YAML a la syntaxe suivante:

nom: 'nom du formulaire'
icone_barre: 'nom d une icone 16x16 et le formulaire latéral'
categorie:
  type: 'catégorie du modele'
  rang: xx
parametres: un tableau de saisies

Les modèles sont regroupés par catégories.
Par défaut, il existe deux catégories : medias et autres. Le rang indique la position du modèle au sein d’une catégorie.

Parmi les paramètres, celui de nom modele est obligatoire et doit obligatoirement être renseigné (éventuellement sous forme d’un hidden).

icone_barre va rechercher dans l’ordre :
-  dans le dossier icones_barre
-  dans le dossier images du thème courant, en choisissant automatiquement la version svg si disponible
-  dans le chemin.

Quatre noms de paramètres, id_modele, variante, classe et align, sont facultatifs et d’un usage spécifique. En effet, le formulaire produira le code suivant : <modeleid_modele|variante|classe|align|param1=valeur1|param2=valeur2>.

Un exemple simple, pour l’insertion d’un formulaire formidable :

nom: '<:formidable:modele_nom_formulaire:>'
icone_barre: 'formulaire-24.png'
parametres:
  -
    saisie: 'hidden'
    options:
      nom: 'modele'
      defaut: 'formulaire'
  -
    saisie: 'hidden'
    options:
      nom: 'variante'
      defaut: 'formidable'
  -
    saisie: 'formulaire_formidable'
    options:
      nom: 'id'
      label: '<:formidable:modele_label_formulaire_formidable:>'
      cacher_option_intro: 'oui'

Valeur par défaut calculée dynamiquement

Pour chaque saisie, il est possible d’utiliser la syntaxe suivante : fonction:function_php_arbitraire pour l’options defaut.

Cela peut servir notamment pour utiliser une valeur de configuration :

    saisie: 'input'
    options:
      nom: 'id'
      label: 'monlabel'
      defaut: 'fonction:lire_config("monplugin/maconfig")'

Ou bien de récuperer un l’identifiant de l’objet courant.

    saisie: 'input'
    options:
      nom: 'id'
      label: 'monlabel'
      defaut: 'fonction:_request("id_xx")'

Personnaliser les traitements

Dans certains cas de modèles complexes (voir par exemple les modèles media), il peut être pertinent de personnaliser les traitements. Auquel cas, au début du fichier YAML de description du modèle, on précisera le nom d’une fonction à utiliser pour le traitement sous la forme traiter: 'ma_fonction'.

Ensuite, on définira la fonction formulaires_ma_fonction_dist dans le fichier PHP formulaires/ma_fonction.php. Cette fonction prendra un unique argument $champs contenant la liste des champs du modèle et renverra le code d’insertion du modèle. Voir les sources des modèles media pour un exemple.

Ajouter une catégorie de modèle

Pour ajouter une catégorie de modèle, il faut utiliser le pipeline inserer_modeles_lister_categories. Celui-ci reçoit un tableau à compléter. Les clés du tableaux correspondent aux catégories. Les valeurs correspondent à la description de la catégorie. Exemple pour le plugin sommaire ajout d’une catégorie sommaire.

Dans le fichier paquet.xml :

	<pipeline nom="inserer_modeles_lister_categories" inclure="sommaire_pipelines.php" />

Et dans le fichier sommaire_pipelines.php

/**
 * Catégorie "sommaire" pour insérer modèle
 **/
function sommaire_inserer_modeles_lister_categories(array $flux): array {
	$flux['sommaire'] = [
		'nom' => _T('sommaire:sommaire_titre')
	];
	return $flux;
}

Porte-plume

Le porte plume ne s’actualise pas rapidement. Si votre bouton n’apparait pas, pensez à vider le répertoire /local/

Appendix : modifier un modèle fourni par un plugin

Le pipeline inserer_modeles_lister_formulaires_modeles permet de modifier les modèles fournit, par exemple pour :
-  supprimer un modèle fournit par un plugin mais non utilisé sur le site ;
-  réaffecter un modèle à une catégorie différente ;
-  modifier les paramètres proposés.

Exemple pour réaffecter un modèle

// Déplacer pour la demo "formulaire_formidable" dans la catégorie "medias"
function plugin_prefix_inserer_modeles_lister_formulaires_modeles(array $flux): array {
	$flux['formulaire_formidable']['categorie']['type'] = 'medias';
	return $flux;
}

Discussion

6 discussions

  • 1

    Bonjour,
    j’utilise beaucoup cet excellent plugin.
    Je ne comprends pas à quoi cela sert d’ ajouter une catégorie de modèle.
    je déclare des modèle avec leur fichier yaml et tous les modèles des plugins apparaissent correctement dans la liste des modèles d’un article.
    A quoi cela sert il ?
    merci

    • Les catégories sont une fonctionnalités ajouté récemment et désactivée par défaut (il faut se rendre dans la page de configuration du plugin pour activer l’affichage)

      Cela permet de regrouper ensemble plusieurs modèles afin de mieux s’y reperer.

      A noter qu’il y a encore un débat sur les catégories à livrer par défaut avec le plugin.

    Reply to this message

  • 3

    Bonjour,
    encore moi ..
    je voudrais utiliser verifier pour tester si un nombre est compris entre deux valeurs ... et je n’y arrive pas. est-ce un pb de syntaxe ou cela n’est pas prévue ? ( verifier et saisie actif)^^

    -
        saisie: 'input'
        options:
          nom: 'delay'
          afficher_si: '@variante@ =="debut"'
          label: "delai avant le déclenchement en ms(0 à 3000, par pas de  50)"
          cacher_option_intro: 'oui'
          verifier:
            type: 'entier' 
            options :        
              min : 0
              max : 3000  
    
    • Normalement cela devrait, et j’ai l’impression que la syntaxe est bonne. Je teste et reviens vers toi.

    • Ah j’ai compris. C’est bien une erreur de syntaxe.

      Le tableau verifier doit être à côté des options pas dans les options.

      -
          saisie: 'input'
          options:
            nom: 'delay'
            afficher_si: '@variante@ =="debut"'
            label: "delai avant le déclenchement en ms(0 à 3000, par pas de  50)"
            cacher_option_intro: 'oui'
          verifier:
            type: 'entier' 
            options :        
              min : 0
              max : 3000  
      ``` 
      pas 
      ``` 
      


      -  
      saisie: ’input’
      options:
      nom: ’delay’
      afficher_si: ’@variante@ ==“debut”’
      label: “delai avant le déclenchement en ms(0 à 3000, par pas de 50)”
      cacher_option_intro: ’oui’
      verifier:
      type: ’entier’
      options :
      min : 0
      max : 3000
      ```
      (attention, modifie dans ton code et ne copie-colle pas le mien, je suis pas sur de mon identation)

    • merci cela fonctionne bien

    Reply to this message

  • Bonjour

    J’utilise un modele yaml pour proposer d’afficher une liste d’articles
    Voici la saisie concernée :

        saisie: 'input'
        options:
          nom: 'id'
          obligatoire: 'oui'
          label: '<:escal:choix_article_choix:>'
          explication: '<:escal:choix_article_choix_explication:>'

    Le formulaire s’affiche bien mais avec “new” dans la ligne de saisie.
    Je ne sais pas d’où sort ce “new”
    J’ai bien essayé de rajouter la ligne

    defaut: ' '

    mais j’ai toujours ce “new”.

    Comment le faire disparaître ?

    Reply to this message

  • 6

    Bonjour,
    J’ai un modèle appelé test.yaml dans le répertoire «modeles», et voici son contenue :

    nom: '<:fomulaire:testModel:>'
    logo: 'images/formulaire-24.png'
    icone_barre: 'formulaire.png'
    parametres:
      -
        saisie: 'hidden'
        options:
          nom: 'modele'
          defaut: 'produit'
      -
        saisie: 'hidden'
        options:
          nom: 'variante'
          defaut: 'image=oui|racourci=oui'

    et je veux afficher le nom du modèle avant de l’insérer. Pouvez-vous m’aider s’il vous plaît

    • Pourriez-vous expliciter un peu plus votre problème ? A priori, le fonctionnement me semble correcte.

      Votre modèle n’a pas de paramètre modifiable (variante est ici un champs caché) et c’est pour cela que la boîte est vide.

      Concernant le nom du modèle, il est affiché “testModel”. Il me semble que cela est lié à l’absence de chaine de langue correspondante. En effet, vous avez mis nom: '<:fomulaire:testModel:>' dans le YAML, ce qui dit à SPIP d’aller chercher la chaîne de langue “testModel” dans le fichier de langues “fomulaire” (y aurait-il ici une faute de frappe ?). Si le fichier de langues “fomulaire” n’existe pas ou s’il n’y pas d’entrée “testModel” dans ce fichier de langues, alors c’est “testModel” qui est directement affiché.

      Cdlt

    • Oui, ça fonctionnement très bien.
      En faite je suis un débutant dans ce framework, vous dites que mon modèle n’a pas de paramètre modifiable, et que dois-je fait pour que cela ne reste plus constant?

    • Les différents paramètres du modèle doivent être précisés sous la forme d’une liste de saisies.
      Pour cela, vous devez déjà vous familiariser avec le plugins Entries for forms

    • Thank you for your help Joseph

    • Merci encore Joseph, voilà ce que je fait :

      nom: '<:fomulaire:testModel:>'
      logo: 'images/doc.png'
      icone_barre: 'doc.png'
      parametres:
        -
          saisie: 'hidden'
          options:
            nom: 'modele'
            defaut: 'produit'
        -
          saisie: 'hidden'
          options:
            nom: 'variante'
            defaut: ''
        -
          saisie: 'inpute'
          options:
            nom: 'id_produit'
            label: 'ID du produit'
            obligatoire: 'oui'
            type: 'number'

      je veux changé l’icone qui est présent dans «images/doc.png» et il se passe rien.

      Cdlt

    • j’ai trouvé le problème, c’est pas dans le répertoire« image» mais on créé une répertoire «iconnes_barre».

    Reply to this message

  • 2

    Bonjour,

    Je me heurte à un bogue (à moins que ce soit une incompréhension de l’article ?) Voici ma configuration :

    • SPIP 3.2.5
    • Insérer Modèle 1.3.4
    • Saisies 3.25.1
    • Vérifier 1.9.5
    • YAML 2.0.11

    Ensuite, voici un modèle type, toto.html pour reproduire le problème que je rencontre :

    <BOUCLE_a(ARTICLES){id_article=#ENV{id}}{tous}>#INTRODUCTION</BOUCLE_a>

    Avec ça, je peux mettre dans un article, par exemple pour référencer l’intro numéro 5, <toto5> ou <toto|id=5> etc.

    Bien, voici maintenant un fichier toto1.yaml type problématique :

    ---
    nom: 'test 1er'
    parametres:
      - saisie: 'hidden'
        options:
          nom: 'modele'
          defaut: 'toto'
      - saisie: 'selecteur_article'
        options:
          nom: 'id'
          label: "quel article ?"
          defaut: ''
          obligatoire: 'oui'

    Et là, c’est le drame... ; le modèle généré est : <toto|id=article|5>

    Bien, maintenant un autre fichier toto2.yaml tout aussi problématique :

    ---
    nom: 'test 2nd'
    parametres:
      - saisie: 'hidden'
        options:
          nom: 'modele'
          defaut: 'toto'
      - saisie: 'selecteur_article'
        options:
          nom: 'id_modele'
          label: "quel article ?"
          defaut: ''
          obligatoire: 'non'

    Le modèle généré est tout aussi étrange : <totoArray> Il va de soi qu’en mettant obligatoire à « oui » on ne peut pas valider (me suis arraché les cheveux un bout de temps dessus)

    Je n’ai pas fait d’autres essais, ne sachant plus trop par quel bout le prendre.

    • Bonjour,
      le problème vient du fait que la saisie selecteur_article renvoie la valeur article|5 et non la valeur 5.

      A ma connaissance, il n’y a pas d’option actuellement pour que cette saisie renvoie que l’identifiant. Il faudrait signaler le besoin sur le forum de discussion du plugin saisies ou bien sur la liste de discussion Spip-Zone.

      Une solution temporaire, si le site n’utilise pas de traduction d’article, est d’avoir recours à la saisie articles_originaux qui ne liste que les articles qui ne sont pas une traduction, sous la forme d’un gros select (et non d’un sélecteur comme selecteur_article).

      Cordialement

    • Merci pour la réponse. (je me demande s’il ne doit pas y avoir une petite note dans l’article qui déconseille les saisies selecteur_...)
      Merci aussi pour la piste des articles_originaux qui répond à mon besoin et donne un modèle (s’il y a des articles non originaux à prendre en compte) certes plus lourd dans la page mais plus accessible (boucles classiques) pour moi.

    Reply to this message

  • 1

    Bonjour,
    quelque chose doit m’échapper... je n’arrive pas à déclarer le formulaire.
    J’ai écrit un fichier “monmodele.yaml” l’ai placé dans le répertoire “squelettes/modeles/”, vidé le répertoire “/local/” et certains sous-répertoires de “tmp/”
    Le modèle n’apparaît pas...
    Que faut-il faire de plus ?
    Merci
    Cordialement

    • Le modèle existe-t-il ? Il est appelé avec quels paramètres ? (syntaxe globale attendue) Enfin, quel est le contenu de ton YAML ?

    Reply to this message

Add a comment

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom