Champs Extras (Interface)

Ce plugin permet de créer et/ou de gérer des champs supplémentaires dans les objets éditoriaux de SPIP depuis l’espace privé de SPIP. Il s’appuie sur le plugin Champs Extras, dont il n’est qu’une simple interface graphique.

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 : séparation de l’API et de l’interface graphique

Il existe deux plugins distincts :

  • le premier, « Champs Extras » (lire « Champs Extras — introduction ») donne accès aux fonctions de création, de gestion et d’affichage des champs. Il est ne constitue qu’un outil de développement. 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 « Core » 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 ». C’est ce plugin qui est documenté ici.

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

Notes

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

Discussion

268 discussions

  • 1

    L’ajout des champs « selecteur d’article » et « selecteur de rubrique » est une grande avancée pour cette version 3, cela permettrait dans SPIP de créer facilement des liens entre objets éditoriaux.

    Mais est-il possible de rendre ces liens réciproques, opérant dans les deux sens ?

    Par exemple : l’article (A) est lié à l’article (B) via un champ extra. Comment faire pour que l’article (B) sache qu’il est lié à (A) ?

    • Heu que ce soit clair ce que propose le plugin champs extras sont les liens écrits dans un champ de la table qui a le champs extras, par exemple ARTICLES, et de façon disons sérialisée (en fait le champ contient le texte « article|3,rubrique|4,article|8 ») MAIS.

      Mais cela n’est pas une table séparée gérant la liaison tel que spip_articles_lies ou je ne sais quoi. Il y a donc pas mal de contraintes avec ces sélecteurs.

      Pour retrouver depuis un autre article, il faut utiliser certainement une expression régulière tel que {maliaison == (^|,)article\|#ID_ARTICLE(,|$)} mais c’est coûteux en perfs.

    Répondre à ce message

  • 2

    Bonjour,

    J’ai associé à mes articles un champ « Sélecteur de rubrique » nommé #TARTEMPION .

    La balise #TARTEMPION placée dans mes squelettes, m’affiche sur mon site « rubrique|12 » moi je voudrais pouvoir afficher les titres des articles de la rubrique 12, avec une boucle qui ressemblerai à ça :

    <BOUCLE_les_titres_de_cette_rubrique(ARTICLES){id_rubrique=#TARTEMPION}>
    #TITRE
    <BOUCLE_les_titres_de_cette_rubrique>

    evidemment ça ne marche pas car #TARTEMPION renvoi « rubrique|12 » au lieu de renvoyer « 12 »

    Une idée quelqu’un ?

    Merci

    • C’est la fonction picker_selected() qu’il faut utiliser, comme tu peux trouver un exemple dans le répertoire saisies-vues/ du plugin saisies avec la saisie que tu as pris. Ça donne par exemple :

      <BOUCLE_rubriques(RUBRIQUES){id_rubrique IN #TARTEMPION|picker_selected{rubrique}}>
      	<li>#TITRE</li>
      </BOUCLE_rubriques>
    • IMPECCABLE ! :)
      Ça marche nickel, merci bien !

      Et bravo pour cet excellent plug au passage !

    Répondre à ce message

  • 2

    Bonjour,

    J’ai un petit soucis en utilisant des textareas en champ extra. Dans le backend de SPIP, pas de soucis, l’aperçu de l’objet me montre bien le contenu de mon champ mis en forme (j’ai choisi l’option avec la barre typographique de SPIP).

    Mais en frontend, la balise #NOM_DU_CHAMP n’interprète pas les enrichissements typographiques, j’ai donc du texte avec des balises SPIP.

    Dois-je ajouter un filtre et si oui lequel ?

    Répondre à ce message

  • 1
    Cricri

    Bonsoir,

    je suis en train de faire un test de migration d’un site en spip 2.1.3 avec champs extras vers Spip 3 RC, mais impossible d’activer les champs extras une fois que Spip 3 a fini de mouliner le contenu. NB le contenu des champs extras s’affiche bien dans mysql.

    J’ai ce message d’erreur quand j’essaye d’activer Champs Extras » (version : 3.0.6) ou l’API de vérification 0.1.14 : "Certaines actions n’ont pas été réalisées. Cela peut provenir d’une erreur lors des actions à réaliser, ou d’un affichage de cette page alors que des actions sont encore en cours."

    Est-ce que ce message d’erreur dans Spip log a quelque chose à voir ?

    Pri:WARNING : Contextes AJAX forces en fichiers ! Cela arrive lorsque la valeur du contexte depasse la longueur maximale autorisee par Suhosin (512) dans ’suhosin.get.max_value_length’. Ici : 980. Vous devriez modifier les parametres de Suhosin pour accepter au moins 1024 caracteres.

    Merci pour votre aide

    • Avec le plugin d’interface : onglet "Technique", Option « Traitements automatiques », mettre « Traitements des raccourcis SPIP (propre) ».

      Cela indique par ailleurs le filtre, si vous ne le voulez pas en automatique : |propre

    Répondre à ce message

  • 1

    Je n’arrive pas à avoir les champs extras prix en compte dans les résultats du moteur de recherche du site :

    Ni les labels, ni les valeurs n’apparaissent dans les résultats !

    J’ai pourtant bien choisi le bouton radio « Oui » sous « Inclure ce champ dans le moteur de recherche ? »

    J’ai aussi vidé le cache de spip et celui du navigateur,
    mais rien n’y fait.

    merci d’avance.

    • marcimat

      Hum. SPIP ne peut chercher que dans le contenu stocké dans la table. Il ne pourra dans sa recherche ni connaitre le label, ni sa valeur si c’est un champ « multiple » (select, radio, checkbox). Les recherches de ces champs ne peuvent porter que sur les clés.

      Si tu as des textarea ou input, il devrait rechercher dans les textes mis dedans. N’est-ce pas le cas ?

    Répondre à ce message

  • 2

    Bonjour,

    Peut-on utiliser un champ extra comme critère de classement d’une boucle ?

    Concrètement, pour reprendre l’exemple de la vidéo, est-ce qu’une boucle listant les articles d’une rubrique du secteur 3 pourrait se voir appliquer un tri sur les résultats du champ extra « loisir » (à supposer qu’il n’ait qu’une valeur par article) ? Quelque chose comme ça :

    <BOUCLE_articles(ARTICLES){id_rubrique}{par loisir}>
    	[<hr /><h2>(#LOISIR|unique)</h2>]
    		<a href="#URL_ARTICLE">#TITRE</a><br />
    </BOUCLE_articles>

    En tous cas, bravo et merci pour ce plugin :)

    Marc

    • Bien sûr. {par nom_du_champ} fonctionne pour n’importe quel champ de la table.

    • Génial, j’en rêvais (si, si :)
      Mille merci

    Répondre à ce message

  • 1

    Merci pour ce nouveau plugin très intéressant adapté à SPIP 3 et j’entrevois beaucoup de possibilités à l’utiliser.

    Je ne vois pas de fichier de téléchargement et j’aimerais le tester...

    Répondre à ce message

  • 15

    le plugin est prometteur, merci !

    la fonction restriction par secteur ne fonctionne pas

    des idées ?

    • Bonjour,

      C’est usant ça... de demander toujours la même chose...
      Je réponds quoi à la phrase « ça marche pas ! » ???

      Un minimum d’explication (type de saisie, objet, texte écrit dans la restriction) n’est tout de même pas si long que ça à écrire ? (avec la version du plugin et de SPIP précise...)

      http://www.spip-contrib.net/Les-choses-a-faire-avant-de-poser-une-question

    • Sorry,
      i’m not French and I’would like to answer using your language.
      You are right. I try to explain better my problem :
      SPIP 3.0.0-beta2 [18918] - Champs Extras 3.0.2 - Saisies pour formulaires 1.20.2 - YAML 1.5.0 - API de vérification 0.1.11

      I set a new « champ extra » for article (text, checkbox or radio) and everything is ok. If I try to set « restriction par secteur » it doesn’t work correctly. I set « 2 » for example, but the « champ extra », is visible also in the article children of the rubrique 1.

      I hope this will be clearer and useful. Thank you for your work !
      Luca

    • Thanks,

      I don’t reproduce the bug. Do you save the formulary after set your restriction ?

      MM.

    • Yes, I saved it.
      Infact If I come back to edit the « Restriction options » I can find the value that i’ve set before in the correct input type.

      Is the spip version correct ? I noticed the plugin installation system is different from the video one. I have not « Ajouter a plugin » for example...

      This is what I found in the DB... I hope it could be useful
      nom :
      champs_extras_spip_articles

      valeur :
      a:1 :i:0 ;a:3 :s:7 :« options » ;a:5 :s:3 :« nom » ;s:7 :« radio_1 » ;s:5 :« label » ;s:14 :« Boutons radios » ;
      s:5 :« datas » ;
      s:36 :"choix1|Un
      choix2|Deux
      choix3|Trois" ;
      s:12 :« restrictions » ;
      a:4 :s:8 :« secteurs » ;
      s:1 :« 2 » ;
      s:8 :« branches » ;s:0 :« » ;
      s:4 :« voir » ;
      a:1 :s:6 :« auteur » ;
      s:0 :« » ;

      s:8 :« modifier » ;
      a:1 :s:6 :« auteur » ;
      s:0 :« » ;

      s:3 :« sql » ;
      s:24 :« text DEFAULT ’’ NOT NULL » ;

      s:11 :« identifiant » ;
      s:14 :« @4f16d21d8e352 » ;
      s:6 :« saisie » ;
      s:5 :« radio » ;

      thank you !

    • Hallo,

      I reproduce the same bug :

      PHP Version 5.2.17
      MySQL 5.0.90
      SPIP 3.0.0-beta2 SVN [18922]
      Champs Extras 3.0.2 SVN [56959]
      Saisies pour formulaires 1.20.2 SVN [57288]
      Champs Extras Interface 3.0.1 SVN [56912]
      API de vérification 0.1.11 SVN [56912]
      YAML 1.5.0 SVN [56912]

      champs_extras_spip_rubriques value :

      a:1 :
      i:0 ;a:3 :
      s:7 :« options » ;a:11 :
      s:3 :« nom » ;s:10 :« titre_page » ;
      s:5 :« label » ;s:16 :« Titre de la page » ;
      s:4 :« type » ;s:4 :« text » ;
      s:16 :« info_obligatoire » ;s:1 :« * » ;
      s:4 :« size » ;s:2 :« 40 » ;
      s:12 :« autocomplete » ;s:6 :« defaut » ;
      s:11 :« obligatoire » ;s:2 :« on » ;
      s:12 :« restrictions » ;a:4 :
      s:8 :« secteurs » ;s:0 :« » ;
      s:8 :« branches » ;s:1 :« 2 » ;
      s:4 :« voir » ;a:1 :s:6 :« auteur » ;s:0 :« » ;
      s:8 :« modifier » ;a:1 :s:6 :« auteur » ;s:0 :« » ;

      s:3 :« sql » ;s:24 :« text DEFAULT ’’ NOT NULL » ;
      s:10 :« rechercher » ;s:2 :« on » ;
      s:11 :« traitements » ;s:16 :« _TRAITEMENT_TYPO » ;

      s:11 :« identifiant » ;s:14 :« @4f17d3ff6b19e » ;
      s:6 :« saisie » ;s:5 :« input » ;

      Everything goes on except restriction by sector/branche.

      Thanks you very much !

    • Ah, maybe it’s with a name with underscore.
      Could you try with a simple name without _ ?

      Thanks a lot.

    • I just try it and verify all parameters, but interface does the same :

      a:1 :
      i:0 ;a:3 :
      s:7 :« options » ;a:11 :
      s:3 :« nom » ;s:9 :« titrepage » ;
      s:5 :« label » ;s:16 :« Titre de la page » ;
      s:4 :« type » ;s:4 :« text » ;
      s:16 :« info_obligatoire » ;s:1 :« * » ;
      s:4 :« size » ;s:2 :« 40 » ;
      s:12 :« autocomplete » ;s:6 :« defaut » ;
      s:11 :« obligatoire » ;s:2 :« on » ;
      s:12 :« restrictions » ;a:4 :
      s:8 :« secteurs » ;s:0 :« » ;
      s:8 :« branches » ;s:1 :« 2 » ;
      s:4 :« voir » ;a:1 :s:6 :« auteur » ;s:0 :« » ;
      s:8 :« modifier » ;a:1 :s:6 :« auteur » ;s:0 :« » ;

      s:3 :« sql » ;s:24 :« text DEFAULT ’’ NOT NULL » ;
      s:10 :« rechercher » ;s:2 :« on » ;
      s:11 :« traitements » ;s:16 :« _TRAITEMENT_TYPO » ;

      s:11 :« identifiant » ;s:14 :« @4f17d3ff6b19e » ;
      s:6 :« saisie » ;s:5 :« input » ;

      Many thanks.

    • @shmuel, tu es tout à jour partout toi, et ça ne fonctionne pas pourtant. C’est frustrant :p. Je vais tester sur une rubrique comme toi aussi. Ni restrictions par secteur ni par branche ne fonctionnent ?

    • Bon, bien... y a pas à dire, ça marche chez moi aussi sur les rubriques. Que ce soit restriction par secteur ou par branche... Quel est ce mystère...

    • Un peu que je suis à jour, SPIP 3 et ton plugin rendent chaud bouillant !

      Le problème est brusquement apparu lorsque j’ai fait une mise à jour de Champs Extra 3, Champ Extra 3 Interface et de tous les plugin qu’ils nécessitent. J’ai d’abord cru à une merdouille venant des dizaines de champs déjà créés, mais en réinstallant le tout et en faisant le test comme indiqué ci-dessus avec simplement deux secteurs dont un avec deux branches, le problème est toujours là.

      En comparant les versions, j’ai constaté également que le problème semblait être apparu à partir de la rev 56933 ou 56731. Peut-être que le problème vient d’un autre plugin ?

    • Bah, bon a fait une modif des autorisations (du nom des autorisations créées). Mais si tu déclares les autorisations en utilisant le plugin interfaces via l’onglet restriction (c’est à dire en ne faisant rien finalement), les changements doivent être transparents.

      La modification en question est http://zone.spip.org/trac/spip-zone/changeset/56666/_plugins_/champs_extras/core/trunk ... Avec autant de 666, ça ne pouvait qu’être dangereux :)

      Ah... je crois que je vois. Mais je n’explique pas pourquoi ça marche chez moi... je regarde un truc.

    • Bon, la version 3.0.3 (http://zone.spip.org/trac/spip-zone/changeset/57365) devrait vous corriger.

      Désolé pour le dérangement :)

      MM.

    • Yesss ! Ca fonctionne à nouveau comme prévu !

      Pour suggestion, rapport à l’utilisation que je fais actuellement du plugin, une variable du type « nombre de points de recherche » viendrait à mon avis parfaire l’outil. Cela permettrait de mieux gérer la pertinence des résultats d’une recherche libre en fonction de l’importance du contenu des champs d’un objet.

      En tout cas, SPIP 3 donne vraiment un nouveau souffle à ce CMS, et ton plugin fait gagner un temps considérable pour structurer les bases de données !

      Bravo et encore merci !

    • Tu testeras ces nouvelles modifications Shmuel : http://zone.spip.org/trac/spip-zone/changeset/57438 . Ça devrait te permettre de régler la pondération.

    • Wow,
      everything seems to run correctly !
      Thank you for your work ! Merci !

    Répondre à ce message

Ajouter un commentaire

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.

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