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

  • 2

    Bonjour,
    J’utilise ce plugin, mais j’ai un petit problème, J’ai crée un champ email où je mets une adresse email. #EMAIL affiche bien l’adresse email, mais quand je cherche a recupéré l’adresse dans un lien ça marche pas. Pourtant quand je mets un filtre textebrut ça marche sauf que @ saute (une adresse sans @ n’est pas une adresse). J’ia essayé |propre et |typo mais rien ne marche. Voici mon lien

    <a href="#" onclick="formulaire_contact('#URL_PAGE{contact, id_article=#ID_ARTICLE}',#ID_ARTICLE,'#TITRE','[(#EMAIL)]'); return false">
    • Pas de rapport avec champs extras a priori.
      Peut être une lame du couteau suisse pour protéger les email ? ou le plugin mailcrypt actif ?

      Il faudrait voir le code source généré (et ce que tu attends à la place).
      Si c’est un filtre qui te manque, tu peux essayer |attribut_html.

      MM.

    • Merci pour ta réponse qui m’a beaucoup aidé. Le filtre |attribut_html. fait sauté le @
      Mais l’option mailcrypt était actif, je lai désactivé et tout est rentré dans l’ordre. Merci encore

    Répondre à ce message

  • 1

    Bonjour
    Est-il possible d’utiliser Champs_Extra 3 sur un Spip 2.1.23 ?
    Merci
    ADB

    • Absolument pas ! Ce n’est pas du tout de même fonctionnement interne, et ça s’appuie évidemment sur les améliorations de SPIP 3 !

      MM.

    Répondre à ce message

  • Bonjour,

    J’essaie Champs Extra 3. Je voudrais en ajouter sur les forums. Les forums sont bien activés dans l’espace privé et fonctionnent en public. Mais je n’ai pas l’objet « Forums » dans Champs extra.

    Qu’est-ce que j’ai oublié ?

    Un grand merci à vous

    Répondre à ce message

  • 2

    Salut,

    j’ai un bug très très curieux. Sous SPIP 3 et chez koumbit.

    Soit un champ extra quelqueconque déclaré avec l’interface. Je dit que les traitements automatiques appliqués est propre.

    En local -> fonctionne nickel, sur le serveur (koumbit) -> ne fonctionne pas.

    En fouillant le code je me rend compte que tt ce joue au niveau de la pipeline cextras_declarer_champs_interfaces_apres_les_autres. Et c’est là où cela devient cocasse.

    En effet, je m’apercois que cette pipeline n’est pas chargée (rien ne passe dedans, je peux y mettre les titi, tata et toto de mon choix -> nada).

    Et là je fais un test un peu sale : je modifie le fichier tmp/log/charger_pipelines.php.

    J’avais des lignes de code qui ressemblaient à cela :

    static $inc=null;
    if (!$inc){
    include_once_check(_ROOT_PLUGINS_DIST.'forum/base/forum.php');
    include_once_check(_ROOT_PLUGINS_DIST.'mots/base/mots.php');
    include_once_check(_ROOT_PLUGINS_DIST.'organiseur/base/organiseur.php');
    include_once_check(_ROOT_PLUGINS_DIST.'petitions/base/petitions.php');
    include_once_check(_ROOT_PLUGINS_DIST.'revisions/base/revisions.php');
    include_once_check(_ROOT_PLUGINS_DIST.'sites/base/sites.php');
    include_once_check(_ROOT_PLUGINS_DIST.'svp/base/svp_declarer.php');
    include_once_check(_ROOT_PLUGINS_DIST.'urls_etendues/base/urls.php');
    include_once_check(_ROOT_PLUGINS.'auto/agenda/v3.6.2/base/agenda_evenements.php');
    include_once_check(_ROOT_PLUGINS.'auto/menus/v0.9.2/base/menus_tables.php');
    include_once_check(_ROOT_PLUGINS.'tickets/base/tickets_install.php');
    include_once_check(_ROOT_PLUGINS_DIST.'breves/base/breves.php');
    include_once_check(_ROOT_PLUGINS_DIST.'medias/base/medias.php');
    $inc=true;
    }
    $val = minipipe('forum_declarer_tables_interfaces', $val);
    $val = minipipe('mots_declarer_tables_interfaces', $val);
    $val = minipipe('organiseur_declarer_tables_interfaces', $val);
    $val = minipipe('petitions_declarer_tables_interfaces', $val);
    $val = minipipe('revisions_declarer_tables_interfaces', $val);
    $val = minipipe('sites_declarer_tables_interfaces', $val);
    $val = minipipe('svp_declarer_tables_interfaces', $val);
    $val = minipipe('urls_declarer_tables_interfaces', $val);
    $val = minipipe('agenda_declarer_tables_interfaces', $val);
    $val = minipipe('menus_declarer_tables_interfaces', $val);
    $val = minipipe('tickets_declarer_tables_interfaces', $val);
    $val = minipipe('breves_declarer_tables_interfaces', $val);
    $val = minipipe('medias_declarer_tables_interfaces', $val);
    $val = minipipe('cextras_declarer_champs_interfaces_apres_les_autres', $val);
    return $val;
    }

    J’ajoute avant le $inc=true la ligne suivante :

    include_once_check(_ROOT_PLUGINS.'auto/cextras/v3.2.4/cextras_options.php');

    Et là, miracle, ma pipeline est chargée !

    Une idée ?

    • ps : mes plugins :

      SPIP 3.0.10 @ www.spip.net spip(3.0.10)
      compagnon(1.4.1),
      dump(1.6.7),
      images(1.1.5),
      forum(1.8.24),
      jqueryui(1.8.21),
      mediabox(0.8.4),
      mots(2.4.10),
      msie_compat(1.2.0),
      organiseur(0.8.10),
      petitions(1.4.3),
      porte_plume(1.12.2),
      revisions(1.7.5),
      safehtml(1.4.0),
      sites(1.7.8),
      squelettes_par_rubrique(1.1.1),
      stats(0.4.15),
      svp(0.80.14),
      urls(1.4.14),
      vertebres(1.2.2),
      calendriermini(2.1.3),
      agenda(3.6.2),
      z(1.7.21),
      nospam(1.0.9),
      jeux(2.4.1),
      spip_bonux(3.0.2),
      nuage(4.0.0),
      menus(0.9.2),
      compositions(3.1.2),
      minibando(1.0.1),
      socialtags(0.9.16),
      crayons(1.13.8),
      faq(2.1.2),
      polyhier(2.0.4),
      theme(0.1),
      article_pdf(0.4.5),
      saveauto(1.0.6),
      player(2.1.2),
      typo_guillemets(1.5.0),
      boutonstexte(2.0.0),
      outils_article(1.0.2),
      autorite(0.9.12),
      facteur(2.4.5),
      notifications(3.0.9),
      querypath(1.0.0),
      bible(4.0.1),
      yaml(1.5.0),
      verifier(1.0.2),
      saisies(1.31.4),
      moderation(2.0.0),
      tickets(2.0.7),
      ppp(1.0.5),
      cextras(3.2.4),
      iextras(3.1.0),
      iterateurs(0.6.1),
      queue(0.6.6),
      bre

      Je viens de tester en local avec les mêmes plugins -> cela fonctionne. On dirait que le options n’est pas tjr bien chargé. Mais pq une diff entre le local et le distant ?

    • très bizarre, je viens de refaire en distant un test ... et ca marche.

      pige rien. 3 h perdu pour pas grand chose.

    Répondre à ce message

  • bonjour à tous,
    j’ai un petit problème avec ce plugins car sur mon local tout fonctionne bien mais pas sur la preprod. Quand je souhaite modifier un champ , tout disparais sauf le bouton enregistrer.
    Merci d’avance

    Répondre à ce message

  • Définition de champs extra mutualisés :

    encore MERCI pour ce plugin indispensable que j’utilise pour personnaliser mon squelette.

    J’ai plusieurs dizaines de sites en mutualisé qui partagent le même squelette. Et comme les champs extra sont fortement liés à mon squelette, je me demande comment « mutualiser » la définition des champs extra ?

    De telle sorte que si je modifie ou ajoute un champ extra, tous mes sites seront automatiquement impactés.

    Avec SPIP 2, j’utilisais le plugin import/export de champs extra. C’était galère car il fallait reporter chaque évolution des champs extra sur tous les sites. M’enfin, je me débrouillais quand même.

    Avec SPIP3, le plugin import/export n’existe plus. Il est toujours possible de faire des copier/coller directement dans les metas de la BDD mais les risques d’erreur sont importants et c’est encore plus la galère qu’avant.

    Répondre à ce message

  • 7

    Bonjour,

    J’ai associé une listes d’auteurs (ensembles d’articles) à des fiches livres par le sélecteur d’articles. A présent j’aimerai que chaque auteur puisse dynamiquement afficher les livres auxquels ils sont liés.

    Quand il n’y a qu’un auteur tout va bien avec :
    [code]#SETcont, article|#ID_ARTICLE
    [/code]

    Ça se corse quand il y en a plusieurs séparés d’une virgule. Comment faire simple et propre ?

    Merci pour votre aide :)

    • Utiliser le filtre |picker_selected :

      #CHAMP|picker_selected{article}
    • Arf mon code est pas du tout du tout passé... Juste pour confirmer car j’ai un doute.

      Code pour la sélection d’un auteur (quand il n’y en a qu’un)

      #SET{con, article|#ID_ARTICLE}
      <BOUCLE_livres(ARTICLES){id_secteur=2}{auteur IN #GET{con}}>

      Code pour la sélection d’un contributeur (il y en a toujours plusieurs)

      #SET{con, article|#ID_ARTICLE}
      <BOUCLE_livres(ARTICLES){id_secteur=2}{contributeur IN #GET{con}}>

      Car là où c’est tendu c’est qu’on doit avoir un résultat de table équivalent à l’ID de l’article.

    • Hum…

      Je ne saisis pas trop ce que tu souhaites faire.
      Mais tu peux t’en sortir avec une expression régulière.

      <BOUCLE_livres(ARTICLES){id_secteur=2}
          {auteur == (^|,)#GET{con}($|,)}>
      ...

      ou

      [(#SET{con, '(^|,)article|#ID_ARTICLE($|,)'})]
      <BOUCLE_livres(ARTICLES){id_secteur=2}
          {auteur == #GET{con}}>
      ...

      MM.

    • Ah par contre faut certainement échapper le | intérieur avec un \

      [(#SET{con, '(^|,)article\|#ID_ARTICLE($|,)'})]

      Enfin c’est à tester tout ça quoi.

    • Merci pour ta réponse mais pas moyen. En fait c’est la même question sans réponse de ce sujet
      http://contrib.spip.net/Champs-Extras-3?debut_comments-list=30#forum458210

      Le soucis n’est pas de chercher la valeur, avec picker_selected pas de soucis. Mais si mon critère est noyé au milieu de plusieurs valeurs...
      Pour mes contributeurs je souhaite afficher les articles dont le contributeur est dans la liste IN.

      Or comment extraire ce critère « contributeur » ? Sinon la boucle ne comprend pas ce qu’elle cherche. Pas facile.

      L’idéal serait de lier plus tard les articles entre eux et non seulement faire un ajout d’article dans un article. A la manière des mots clés.

    • Oui, en fait tu aurais tout intérêt à passer par une table de liaison. C’est bien ce que je dis à Manu d’ailleurs.

      Mais j’ai l’impression que ce que tu cherches est le plugin a2a in fine, ou quelque chose d’approchant, non ? http://contrib.spip.net/Le-plugin-a2a-pour-lier-des-articles

    • J’avais vu ce plug mais si c’était si simple je l’aurai pris. Mais l’intérêt aurait été de faire la même chose avec le sélecteur d’articles.

      La table de liaison oui c’est en partie ce que j’ai fait, tant qu’il n’y a qu’un auteur et pas une liste tout va bien. C’est la liste car si on a :

      LIVRE1 : article|1,article|2,article|3
      LIVRE2 : article|2
      LIVRE3 : article|2,article|3

      le critère recherché auteur ne retrouvera pas ses petits étant donné qu’il est noyé dans une liste. Les valeurs c’est pas un problème. Mais peut-on faire du :

      <BOUCLE_auteur(ARTICLES){{maliaison == (^|,)article\|#ID_ARTICLE(,|$)} IN #GET{con}}>

      J’ai l’impression d’être dans une impasse...

    Répondre à ce message

  • 1

    Bonjour à tous,

    Tout d’abord, merci pour ce Plugin qui m’est d’une grand aide pour le développement du site de notre association (http://www.fasee.fr).
    Cela me permet notamment de rendre la partie privée plus simple à gérer pour les rédacteurs.

    Cependant, après maintes recherches je n’ai pas réussi à trouver mon Graal :-).
    En effet, j’ai souhaité intégrer un Agenda avec FullCalendar sur mon site. FullCalendar fait appel aux champs extra déclarés pour extraire les informations de chaque évènement (Nom, date, lieu, adresse...).

    Du coup en y insérant mes premiers évènements de test, je me suis rendu compte que l’heure de l’évènement était automatiquement fixée à 00h00.

    Après plusieurs recherches dans les codes de Champs_Extra, Saisie, Champs_Extra_interface je n’ai pas réussi à trouver où cela était fait...

    Du coup je souhaitais savoir s’il existait une « méthode » (ou bidouillage) pour intégrer la saisie de l’heure en même temps que la date ou à défaut de pouvoir la récupérer via un autre champs extra ?

    J’ai trouvé cet articles : http://contrib.spip.net/La-date-heure-via-un-menu, mais le fait de toucher au noyau de spip ne me plait pas forcément...

    Désolé si ma requête a déjà été traitée auparavant.
    Je vous tiens au courant si je trouve une méthode simple de mon côté (ne connaissant pas forcément très bien le php, cela risque d’être du bidouillage pur et dur...)

    Merci par avance !

    • Bonjour à tous,
      Finalement j’ai contourné mon problème avec un peu de bidouillage.

      L’astuce consiste à utiliser deux champs distincts : un pour la date et un pour les horaires.
      Si ça peut servir (sait-on jamais) voici comment j’ai procédé :

      Je continue donc d’utiliser un Datepicker « simple » pour le premier et j’utilise une liste déroulante pour le second auquel j’applique le format SQL datetime DEFAULT ’0000-00-00 00:00:00’ NOT NULL.

      J’ai ordonné la liste déroulante de la façon suivante :
      0000-00-00 00:00:00|00:00
      0000-00-00 00:30:00|00:30
      0000-00-00 01:00:00|01:00
      0000-00-00 01:30:00|01:30
      ...
      ...
      0000-00-00 23:00:00|23:00
      0000-00-00 23:30:00|23:30

      Cela permet d’avoir un vue simplifié pour les auteurs (par exemple : 00h30) mais de garder le bon format pour le datetime côté « traitement » (ici donc : 0000-00-00 00:30:00).

      Enfin, je récupère les heures et minutes avec les filtres correspondants sur mon champ issu de la liste déroulante


      .

      Il doit sûrement y avoir une solution plus simple, donc si vous avez je suis preneur :-).

      Merci !

    Répondre à ce message

  • Bonjour,

    J’ai un souci avec les champs extra, sélécteur d’article. Pour un article en particulier je sélectionne plusieurs articles liés, mais le plugin ne reconnait qu’à partir du 3e article ...
    Est-ce que quelqu’un a eu chose pareille ?
    ça marchait bien jusqu’à hier qd j’ai fait la manip avec grenier pour passer le site en utf...
    je suis sur SPIP 3.0.7 et plusieurs plugins...
    merci d’avance,

    Répondre à ce message

  • Bonjour,

    je souhaiterais avec « Sélecteur d’articles » :
    -  contraindre le choix d’articles multiples dans une seule rubrique (ne pas avoir d’autres articles à choisir dans d’autres rubriques, mais seulement une)
    -  utiliser le petit moteur de recherche afin qu’il trouve dynamiquement les articles (toujours de cette rubrique restreinte) avec le même début.

    Exemple une rubrique auteurs (numéro1) où il y a 500 noms.
    -  > avoir simplement le champs de recherche de type text, rentrer les 4 premières lettres d’un nom et avoir affiché les noms avec ces 4 premières lettres.

    Pour l’instant le champs de recherche est limité aux ID_ARTICLE.

    J’ai pensé faire un plugin à part ou bien modifier l’existant pour le projet. Où puis-je trouver de la doc ? Avez-vous des conseils à me donner ?

    merci pour votre aide.

    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