Champs Extras 3

Ce plugin permet de créer et/ou de gérer des champs supplémentaires dans les objets éditoriaux de SPIP. Il permet donc de prendre en compte et d’afficher de nouveaux éléments dans n’importe quel objet éditorial de SPIP.

Screencast

Vous n’aimez pas lire ? Écoutez pendant 20mn !

Cette capture présente Champs Extras 3 avec son interface graphique [1]. Elle est présente sur medias.spip.net où vous pourrez voir la vidéo en plus grand format.

Introduction

Ce plugin est plus qu’une adaptation pour SPIP 3 du plugin « Champs Extras 2 ». Les nouveaux champs sont toujours stockés dans de nouvelles colonnes SQL sur les objets éditoriaux correspondants, mais l’interface et le fonctionnement technique sous-jacent a été en grande partie modifié pour deux raisons essentielles :

  • SPIP 3 offrant une méthodologie pour déclarer des objets éditoriaux, ce plugin s’appuie donc dessus pour connaître la liste des objets sur lesquels il peut intervenir et créer de nouveaux champs. Ainsi, il est possible à l’aide de EXTRA3 d’ajouter des champs à tous les objets éditoriaux (et éditables) déclarés par SPIP3 ou par des plugins. (Avec EXTRA2, il était nécessaire que le plugin à l’origine de l’objet éditorial le déclare comme extensible).
  • Le plugin « Saisies » dispose d’un générateur de formulaire, à l’origine créée pour le plugin « Formidable, le générateur de formulaires » et d’un nombre de saisies possibles grandement supérieur à ce que proposait la version 2. Mutualiser ce code entre plusieurs plugins permet une meilleure maintenance, une interface plus complète et une aussi grande extensibilité.

L’ensemble est donc à la fois plus fonctionnel, plus extensible, le tout en utilisant bien moins de code.

Séparation de l’API et de l’interface graphique

Ce plugin est séparé en deux éléments indépendants :

  • le premier, « Champs Extras » (lire « Champs Extras 3 - API et créations ») donne accès aux fonctions de création, de gestion et d’affichage des champs, mais pour d’autres plugins. Il nécessite le plugin « Saisies ». Un exemple (Titre Court sur les rubriques) dans le dossier extensions montre comment créer un plugin offrant des champs prédéfinis.
  • le second, « Champs Extras (Interface) » profite des points d’entrées et des fonctions du plugin « API » pour proposer une interface graphique de gestion et de création de ces champs supplémentaires. Ce plugin nécessite quand à lui évidemment « Champs Extras (API) » et « Saisies », mais également « Le plugin YAML » et « Vérifier ».

Présentation de l’interface

Lorsque le plugin d’interface est activé, le menu de configuration permet d’aller sur la page de configuration des Champs Extras (?exec=champs_extras).

Cette page présente :

  • la liste des objets sur lesquels on peut insérer des champs extras, indiquant pour chaque objet le nombre de champs extras présents,
  • puis, si c’est le cas, un cadre se trouve dessous indiquant pour certains objets que certaines colonnes SQL ne sont gérées ni par SPIP ni par un plugin, et que Champs Extra peut éventuellement les gérer.

Liste des objets éditoriaux exploitables

On le remarque sur l’image, ici seul l’objet Articles a 1 Champs Extra. De plus, dans le second cadre, on voit que le champ « openid » peut être géré. Ce champ provient du plugin « OpenId » qui avait du être installé mais n’est actuellement pas actif sur le site. Comme il n’avait pas été désinstallé (mais seulement désactivé), le champ est resté dans la table SQL des auteurs.

Créer un nouveau champ via l’interface

Seuls les webmestres du site ont accès à ce panneau de configuration.

Pour ajouter un élément dans un des objets, il faut cliquer sur le nom de l’objet souhaité.
Nous allons créer un champ dans la table des articles, nous cliquons donc sur leur nom.

Cela nous amène sur une autre page (du même fonctionnement donc que le plugin Formidable), qui présente :

  • les Champs Extras présents sur l’objet (que l’on peut déplacer, modifier, dupliquer ou supprimer),
  • puis la liste des types de champs que l’on peut ajouter.

Présentation du formulaire d'édition d'un objet

Il suffit de cliquer un des types de champs pour ajouter cet élément dans la liste des champs présents. Cet élément se placera automatiquement en fin de liste. Nous ajoutons ici des cases à cocher.

On peut le voir sur l’image suivante, un message indique alors que le formulaire est modifié par rapport à son état normal. On a trois possibilités offertes :

  • Continuer nos modifications, autant qu’on en souhaite,
  • Annuler toutes nos modifications en « Réinitialisant le formulaire »
  • Valider nos modifications en « Enregistrant le formulaire » en bas de page.

Des champs de type Cases ajoutés aux articles

Nous allons déplacer les cases ajoutées en premier, pour cela, on survole les « cases à cocher », clique en gardant enfoncé notre bouton l’icône de déplacement (la première, des flèches bleues), et on monte la souris vers le haut, au dessus du premier champ. Un cadre jaune apparaît à l’endroit ou se placera le champ déplacé. On peut alors relâcher le bouton de la souris. Si la manœuvre vous paraît périlleuse, n’ayez crainte : cette façon de faire n’est qu’un raccourcis. On peut également définir l’emplacement du champs extra en le modifiant.

C’est d’ailleurs modifier le Champ Extras des cases que nous allons faire maintenant. Pour cela, on clique la seconde icône. Un formulaire détaillé apparaît alors :

Édition de cases à cocher

On peut observer que les options sont nombreuses et divisées en onglets pour plus de clarté. Décrivons sommairement ce que sont ces onglets :

  • Description : concerne essentiellement les textes qui seront affichés ainsi que le nom technique du champ (le nom de la colonne SQL)
  • Utilisation : concerne des options sur le type de code HTML généré
  • Affichage : permet de compléter les descriptions du champ, par exemple par un message d’avertissement
  • Validation : indique le type de vérification à effectuer sur le contenu saisi
  • Restriction : permet de limiter l’affichage des champs à certaines personnes ou parties du site.
  • Technique : représente la liste des options liées à SPIP, à la base de données. Il permet également de modifier de type de saisie (pour passer de cases à radio par exemple).

À noter que les éléments affichés dans chaque onglet peuvent différer d’un type de saisie à une autre. Un champ « Ligne de texte » n’affiche pas les mêmes possibilités de configuration qu’un champ « Cases à cocher ».

On comprend vite ainsi que lorsqu’on crée un nouveau champs extra, la première chose à faire est de changer les informations présentes dans l’onglet « Description » et en particulier son nom technique, le « nom du champ ». Effectivement, cela nous évitera d’appeler le champ #CHECKBOX_1 dans un squelette, qui ne reflète pas une information sémantique, mais technique. On peut par exemple modifier le champ en le nommant « hobbies » (ce qui permettra d’utiliser #HOBBIES), et modifier son libellé et valeurs. Cela donnerait ensuite, après validation du formulaire de configuration de la case à cocher, la prévisualisation suivante :

Cases à cocher modifiées

Pour valider nos changements, il faut alors enregistrer le formulaire de champs extras. Ceci fait, on peut ensuite se rendre sur un article, nous être satisfait de voir nos deux champs présents, à la fois sur le formulaire d’édition et sur la vue du texte. Voici dans le formulaire des articles ce que cela donne :

Deux champs en plus sur les articles

Utiliser les champs dans les squelettes

Valeur d’un champ

Les champs extras sont comme les autres champs d’une table SQL, interrogeables en utilisant #NOM_DU_CHAMP.

Pour afficher donc le résultat d’un champ il suffit d’utiliser son nom. Le champ est d’autre part éditable avec la classe CSS #EDIT{nom_du_champ} si vous avez le plugin Crayons :

  1. <p class='#EDIT{documentation}'>#DOCUMENTATION</p>

Valeur d’un champ multiple (cases à cocher, boutons radios,...))

Pour afficher la liste des valeurs de cases à cocher saisies par l’utilisateur, vous pouvez utiliser la balise #LISTER_VALEURS{nom_du_champ} :

#LISTER_VALEURS{hobbies} : Musique, Danse, ...
#LISTER_VALEURS{hobbies, ' / '} : Musique / Danse / ...
#LISTER_VALEURS**{hobbies} : tableau des résultat à exploiter par exemple avec une boucle POUR

Les valeurs affichées sont les valeurs lisibles par les humains, et non pas les valeurs informatiques brutes.

Pour afficher la liste des possibilités qu’il y avait de saisies, vous pouvez utiliser de la même manière #LISTER_CHOIX{nom_du_champ}

#LISTER_CHOIX{hobbies} : Musique, Danse, ...
#LISTER_CHOIX{hobbies, ' / '} : Musique / Danse / ...
#LISTER_CHOIX**{hobbies} : tableau des résultat à exploiter par exemple avec une boucle POUR

Informations d’une saisies

Enfin, vous pouvez récupérer n’importe quelle information sur la saisie en utilisant la balise #CHAMP_EXTRA{nom_du_champ}. Elle récupère tout le tableau d’information connue sur le champ extra. Cependant, elle est surtout utile pour afficher un des éléments #CHAMP_EXTRA{nom_du_champ, element} tel que le label :

#CHAMP_EXTRA{documentation,label}
#CHAMP_EXTRA{hobbies,label}
#CHAMP_EXTRA{hobbies,explication}

Créer de nouveaux types de saisies

Si les saisies présentes ne sont pas suffisantes pour votre utilisation, vous pouvez en créer de nouvelles dans votre répertoire squelettes ou votre plugin en créant :

  • saisies/ma_saisie.html,
  • saisies/ma_saisie.yaml et
  • saisies-vues/ma_saisie.html

Reportez vous à la documentation du plugin « Saisies » ou aux fichiers de saisies du même plugin pour vous en inspirer.

Nesting Level et XDebug

Si vous rencontrez cette erreur : Fatal error : Maximum function nesting level of ’100’ reached c’est que xdebug est actif. Il faut augmenter sa profondeur d’exécution. Par exemple en mettant dans votre config/mes_options.php l’instruction suivante (pensez à ouvrir <?php sur la première ligne et caractère du fichier si ce n’est pas fait, et pas la peine de le fermer)

<?php
ini_set('xdebug.max_nesting_level', 200);

Notes

[1Cette interface a évolué depuis la prise de cette vidéo ; cependant le fonctionnement est relativement identique

Dernière modification de cette page le 17 mars 2019

Discussion

226 discussions

  • Bonjour,

    J’ai ajouté un champ extra document pour changer la bannière de la page de l’article concerné, mais impossible de l’afficher. Visiblement, ça reste en mode document et ne veut pas afficher l’image.

    J’ai utilisé cette astuce, mais pareil, il ne reconnait pas l’image. Même en utilisant la boucle Document et en ajoutant l’ID - id_document=#BANNIEREIMAGE.

    J’ai essayé en mettant l’id d’une autre image et ça a fonctionné. mais pas pour celle dont j’ai ajouté l’ID (via la bibliothèque) dans le champ « Bannière image » créé en champ extra.

    Merci de vos lumières.

    Gil

    Répondre à ce message

  • Bonjour,

    J’ai ajouté un champ extra document pour changer la bannière de la page de l’article concerné, mais impossible de l’afficher. Visiblement, ça reste en mode document et ne veut pas afficher l’image.

    J’ai utilisé cette astuce, mais pareil, il ne reconnait pas l’image. Même en utilisant la boucle Document et en ajoutant l’ID - id_document=#BANNIEREIMAGE.

    J’ai essayé en mettant l’id d’une autre image et ça a fonctionné. mais pas pour celle dont j’ai ajouté l’ID (via la bibliothèque) dans le champ « Bannière image » créé en champ extra.

    Merci de vos lumières.

    Gil

    Répondre à ce message

  • 2

    Mots-clés en boutons radio

    Bonjour !

    Je souhaite faire un champ permettant de cocher un seul mot-clé parmi un groupe précis de mots-clé. En configurant mon champ « mot-clé », je choisis donc mon groupe (onglet Description), et je constate que, dans l’onglet Utilisation, j’ai bien « L’utilisateur pourra sélectionner plusieurs valeurs » qui est décoché.

    L’explication de « Forcer l’utilisation d’un select » précise d’ailleurs : Si un groupe de mots est sélectionné, par défaut il s’agira d’une saisie radio. Vous pouvez forcer l’utilisation d’un select.

    Or ce champ propose des cases à cocher (dont on peut cocher plusieurs cases) et non des boutons radio. Ai-je loupé quelque chose ou y a-t-il un souci dans le plugin (ne serait-ce qu’un texte induisant en erreur) ?

    Je précise que, dans l’usage ordinaire des mots-clés associés aux articles, ceux de ce groupe peuvent être sélectionnés à plusieurs. (Et en testant avec un groupe de mots autorisant d’ordinaire le choix d’un seul mot à la fois, je n’obtiens pas non plus des radio mais un… select !)

    SPIP 3.1.10, Champs extras 3.12.0, Champs extras (interface) 3.5.8, Saisies pour formulaires 3.21.1

    Merci d’avance.

    1138.

    • Ah ben justement ça en causait cet après-midi sur l’irc, tu n’es pas le seul à être déboussolé par cette saisie.

      Je précise que, dans l’usage ordinaire des mots-clés associés aux articles, ceux de ce groupe peuvent être sélectionnés à plusieurs

      C’est à cause de ça, la saisie regarde la config du groupe de mot-clé correspondant, si plusieurs valeurs sont possibles, ça met des checkbox (indépendamment du paramètre que tu choisis dans la config de la saisie).

      Il faudra à un moment changer la saisie pour enlever ces choix automatiques cachés à l’utilisateur.

    • Merci pour l’explication.

      Oui, ça me paraissait cohérent, c’est pour ça que j’ai évoqué la possibilité d’un texte induisant en erreur. ;-)

      Quelle serait donc l’idée pour la suite ? Avoir la possibilité de mettre des radio, ou bien être plus clair dans ce que le plugin fait ? En fonction du truc, ça me permettra de savoir quelle technique je vais devoir mettre en œuvre pour la fonctionnalité que je veux faire.

      Merci d’avance.
      (Ci-joint, un petit cadeau pour la commu des devs Spip.)

    Répondre à ce message

  • 2

    Bonjour,
    Cela bug avec le groupe de champs / fieldset. depuis la 3.5.7. LA 3.5.6 marche bien et quelque soit la version de saisies (=<3.20.0). J’ai testé.
    Quand on veut modifier un groupe d champs, en cliquant sur le bouton , cela disparaît
    cela donne ces erreurs :

    Warning : array_walk_recursive() expects parameter 1 to be array, null given in /var/www/html/plugins/auto/saisies/v3.20.0/formulaires/construire_formulaire.php on line 148

    Warning : array_splice() expects parameter 1 to be array, null given in /var/www/html/plugins/auto/saisies/v3.20.0/inc/saisies_manipuler.php on line 103

    Warning : array_splice() expects parameter 1 to be array, null given in /var/www/html/plugins/auto/saisies/v3.20.0/inc/saisies_manipuler.php on line 103

    • Bonjour,

      Quelle version de spip et php ?

    • Cela a été corrigé dans la 3.5.8.
      J’ai une demande sur les champs extras : j’arrive à les créer via un plugin par soit une déclaration en base, ou soit en écrivant la config dans un meta.
      Dans les deux cas, cela n’apparaît pas dans l’interface graphique. Y a t il une solution ?

    Répondre à ce message

  • 1

    Bonjour,

    Je remonte vers vous un problème découvert avec le plugin Mailsubscribers :

    Bonjour, j’ai exactement le même problème, lorsque j’ajoute manuellement un nouvel abonné, j’ai une erreur saisie :
    « Il y a 1 erreur dans votre saisie, veuillez vérifier les informations. »
    Alors que tous les champs sont correctement remplis !
    Pareil dans la partie publique.
    La version de MailSubscribers : 2.9.0
    Merci d’avance pour votre aide

    C’est un bug au niveau du afficher_si.
    Lorsque le afficher_si est masqué, le plugin essaie quand meme de voir s’il est obligatoire. Cela m’étonne qu’on ait encore ce bug. Je vais regarder.

    Pour info, j’ai désactivé tous les plugins et réactivé seulement :
    Champs Extras 3.11.5
    Champs Extras (Interface) 3.5.3
    MailShot 1.26.0
    MailSubscribers 2.9.0
    Newsletters 1.5.5
    Et j’ai toujours le même souci : « Il y a 1 erreur dans votre saisie, veuillez vérifier les informations. »

    Il se confirme que c’est bien champs extra qui pose problème. Sa vérification des valeurs ne passe pas par l’API de Saisies. Or cette API, normalisé, prend en compte les afficher_si, ce qu’il n’est pas présentement le cas. Il faudrait reporter le problème sur le forum de champs extras.

    Merci d’avance pour votre suivi,
    Hicham

    Répondre à ce message

  • Marche plus la balise #LISTER_CHOIX{x} ?
    Je l’ai placé dans une boucle article mais il ne me retourne rien...

    Répondre à ce message

  • Nice plugin, thanks
    I could add some extra fields for authors’s social connections. Please translate this plugin into English. It was difficult for me using google translator to find out the way it works.
    One more thing : doesn’t work for Label of Fieldset. But it works for its Explanation.

    Répondre à ce message

  • Hello,

    Existe t-il un moyen de personnaliser l’affichage du champ extra dans la page de l’objet (page article ou rubrique, par exemple) et éventuellement de ne pas afficher le champ ?

    Merci d’avance.

    Répondre à ce message

  • Après quelques temps d’utilisation Champs Extras s’avère indispensable et parfaitement stable (SPIP v3.2) et d’un grand confort d’utilisation alors : merci ! J’aurais une demande supplémentaire : serait-il possible d’avoir dans les champs de questionnaires relatifs à l’ajout d’objets spip existants (tels que : ajout de mot-clé, ajout d’auteur) une double modalité proposant à la fois la sélection par liste déroulante et un champ de saisie numérique pour saisir directement l’#ID (comme ce qui existe déjà dans la dist. pour la gestion du formulaire d’administration des mots, ex. [si j’ai bien compris] https://zone.spip.net/trac/spip-zone/browser/_core_/plugins/mots/formulaires/administrer_mot.php où on propose la double zone). Je ne suis pas calée pour le faire moi-même, d’où cette demande si vous pouvez. Merci.

    Répondre à ce message

  • Bonjour, je me heurte subitement à une, semble-t-il, quasi impossibilité avec les champs extras. Voilà : j’ai créé un champ extra, type liste déroulante, avec deux choix, pour chacun desquels il y a une paire cle/valeur.
    J’arrive facilement à récupérer sur ma page la valeur choisie, là pas de problème. Mais c’est une autre paire de manches pour récupérer la clé !! J’ai regardé la table spip_documents, et ai constaté qu’il n’y a qu’une seule information saisie, la valeur.
    Mais alors, où se trouve la clé ? Et y a-t-il un moyen de récupérer cette clé pour l’afficher ? Je voudrais pouvoir ainsi renommer une balise css en fonction de celle-ci.
    Merci de m’indiquer si cela est faisable avec spip.
    Cordialement. Marc

    Répondre à ce message

Ajouter un commentaire

Qui êtes-vous ?
  • [Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom