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 les articles, rubriques, mots, groupes de mots, auteurs et sites.
Installation
- Le plugin est téléchargeable à cette adresse : Champs Extras2.
- L’interface de gestion graphique est dans un autre plugin : Champs Extras2 Interface
- Il suffit de décompresser ces zips dans le répertoire
plugins/ou d’utiliser le chargeur automatique.
Les nouveaux champs sont créés dans les tables SQL correspondantes (table SQL « spip_rubriques » pour l’objet éditorial « rubrique »). Chaque champ nouveau est une nouvelle colonne dans la table SQL. C’est ce qui le différencie des champs extras présents avant SPIP 2.0 qui stockaient l’ensemble des champs dans une seule colonne « extra » des tables SQL. Ces nouveaux champs peuvent donc être appelés dans les squelettes SPIP directement par #NOM_DU_CHAMP.
Ce plugin est séparé en deux éléments indépendants :
- le premier, « core » donne accès aux fonctions de création, de gestion et d’affichage des champs, mais pour d’autres plugins. Un exemple de plugin (Post-scriptum sur les rubriques) dans le dossier extensions montre comment créer des plugins offrant des champs prédéfinis.
- le second, « 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.
Créer un nouveau champ via l’interface graphique
Nécessite : SPIP 2.0, Champs Extras Core (cextras), Champs Extras Interface (iextras), SPIP Bonux et Saisies.
Seuls les webmestres du site ont accès à ce panneau de configuration (l’auteur numéro 1 par défaut). Pour déclarer de nouveaux webmestres, il faut spécifier (en SPIP 2.0) leurs numéros d’auteur dans la constante _ID_WEBMESTRES en ajoutant cette ligne dans le fichier mes_options.php :
Exemple 1 : ajout d’un prénom sur un auteur
Nous allons créer un champ ’prenom’ sur les auteurs de SPIP.
Pour cela, il faut aller dans « Configuration > Champs Extras » et cliquer l’icône « Créer un champ extra ».

- Champs Extras 2
- Page d’édition d’un nouveau champ
Le formulaire doit être rempli en indiquant correctement les saisies demandées, car certaines ne seront plus modifiables par la suite (champ, table et ligne SQL). Découvrons les éléments à renseigner :
- Champ : le nom du champ SQL de la table. Ici, saisir : « prenom » ; le champ supplémentaire sera alors utilisable dans les squelettes avec la balise
#PRENOM; - Objet éditorial : table sur laquelle s’applique ce champ, ici « Auteurs » ;
- Label : correspond au nom qui s’affichera dans le formulaire d’édition. on pourrait renseigner ici « Prénom ». On peut aussi mettre un code de langue « code_langue » ou « plugin:code_langue » (il faut alors qu’il existe, ou créer le fichier de langue associé) ;
- Précisions : correspond à une ligne précisant l’élément de formulaire à remplir. Ici, ce n’est pas nécessaire, mais dans d’autres cas, ce pourrait être « Cocher aux moins deux éléments sur les quatre proposés ». Un code de langue peut aussi être utilisé ;
- Champ obligatoire : le champ doit-il être obligatoirement renseigné ?
- Rechercher : ce champ doit-il être intégré dans le moteur de recherche de SPIP (lorqu’on fait une recherche sur l’objet en question) ;
- Type de saisie : le type de saisie permet d’afficher tel ou tel type de formulaire pour remplir le champ demandé. Ce peut être une simple ligne (affichera un input de type
text, comme pour, par exemple, un sous-titre), un bloc (affichera une zone de saisietextarea), un élément à deux entrées oui ou non, etc. Ces éléments sont définis dans le dossierextra-saisies/. De la même maniere, le dossierextra-vues/permet de gérer des vues particulières (ce qui est affiché lorsqu’on visualise un élément éditorial, et non lorsqu’on l’édite). Ici, nous avons besoin de la saisie « ligne ». À noter : il est assez simple de créer de nouveaux masques de saisie et de vue. - Liste de valeurs : certaines saisies peuvent nécessiter une liste de clé/valeurs pour fonctionner, comme les cases à cocher, boutons radio ou sélections. Il faut les indiquer dans ce champ quand nécessaire.
- Définition SQL : correspond à la syntaxe SQL décrivant l’élément. Cette description permet de créer le champ dans la table. Par défaut, c’est un élément "texte" qui est proposé, ce qui nous convient. On pourrait aussi mettre dans ce cas
varchar(30) NOT NULL DEFAULT ''
À la soumission de ce formulaire de création, le champ est créé. Le formulaire de l’auteur dispose maintenant d’un champ supplémentaire.
Exemple 2 : attribution d’un auteur à une brève
Nous allons créer un champ ’id_auteur’ sur les brèves de SPIP, permettant d’attribuer un auteur aux brèves. Cliquer l’icône « Créer un champ extra » et remplir comme indiqué :
- Champ : Saisir : « id_auteur ». La balise
#ID_AUTEURpourra donc être utilisée sur les brèves ; - Objet : « Brèves » ;
- Label : « Nom de l’auteur », ou « Auteur de la brève ».
- Type de saisie : nous avons besoin de la saisie « auteur ».
- Définition SQL : ce qui nous intéresse est un identifiant numérique pour stocker l’identifiant de l’auteur. On remplace donc par :
bigint(21) NOT NULL DEFAULT 0.
Créer un nouveau champ via un plugin
Nécessite : SPIP 2.0, Champs Extras Core (cextras).
Vous pouvez utiliser les API du plugin core pour proposer un plugin gérant des champs qu’il définit.
Pour cela, il faut créer un plugin nécessitant le plugin « Champs Extras Core » et utilisant un pipeline « declarer_champs_extras » comme ceci :
- <plugin>
- <nom>Un auteur sur les brèves</nom>
- <auteur>Vous !</auteur>
- <licence>GNU/GPL</licence>
- <version>0.1</version>
- <version_base>0.1</version_base>
- <description>
- Ajoute un champ "id_auteur" sur les breves de SPIP.
- </description>
- <etat>stable</etat>
- <prefix>auteur_sur_breves</prefix>
- <necessite id="cextras" version="[0.8;]" />
- <install>base/auteur_sur_breves_install.php</install>
- <pipeline>
- <nom>declarer_champs_extras</nom>
- <inclure>base/auteur_sur_breves.php</inclure>
- </pipeline>
- </plugin>
Vous devrez alors créer les fichiers base/auteur_sur_breves_install.php et
base/auteur_sur_breves.php avec pour contenu par exemple :
auteur_sur_breves.php :
Il permet de déclarer les champs extras, en reprenant les mêmes éléments que le formulaire de l’interface.
- <?php
- 'table' => 'breve', // sur quelle table ?
- 'champ' => 'id_auteur', // nom sql
- 'label' => 'Auteur de la brève', // chaine de langue 'prefix:cle'
- 'precisions' => '', // precisions sur le champ
- 'obligatoire' => false, // 'oui' ou '' (ou false)
- 'rechercher' => false, // false, ou true ou directement la valeur de ponderation (de 1 à 8 generalement)
- 'type' => 'auteur', // type de saisie
- 'sql' => "bigint(21) NOT NULL DEFAULT 0", // declaration sql
- ));
- return $champs;
- }
- ?>
auteur_sur_breves_install.php :
Il indique les actions à réaliser à l’installation et à la désinstallation du plugin. Ici, on appelle simplement des fonctions du plugin « Champs Extras Core »
- <?php
- include_spip('inc/cextras_gerer');
- include_spip('base/auteur_sur_breves');
- function auteur_sur_breves_upgrade($nom_meta_base_version,$version_cible){
- $champs = auteur_sur_breves_declarer_champs_extras();
- installer_champs_extras($champs, $nom_meta_base_version, $version_cible);
- }
- function auteur_sur_breves_vider_tables($nom_meta_base_version) {
- $champs = auteur_sur_breves_declarer_champs_extras();
- desinstaller_champs_extras($champs, $nom_meta_base_version);
- }
- ?>
Cas des listes d’énumération :
Pour les types d’énumération, il faut indiquer un tableau PHP d’éléments clé=>valeur. Exemple :
- 'table' => 'rubrique', // sur quelle table ?
- 'champ' => 'enum', // nom sql
- 'label' => 'info_enum', // chaine de langue 'prefix:cle'
- 'type' => 'menu-cases', // type de saisie
- "cle1"=>"valeur1",
- "cle2" => "valeur2",
- "cle3" => "valeur3",
- ),
- 'sql' => "text NOT NULL DEFAULT ''", // declaration sql
- ));
Rien de plus...
Prendre en compte des champs déjà existants
Il est possible que vous ayez déjà ajouté des champs dans les tables SQL des objets éditoriaux de SPIP, par exemple en utilisant phpMyAdmin. Dans ce cas, vous aimeriez qu’ils soient pris en compte dans l’interface privée de SPIP.
Pour ce faire, le plugin « interface » établit la liste les champs existants et vous signale ceux qui sont gérés par « extras2 », ainsi que ceux qui ne le sont pas. Il suffit donc d’associer le champ voulu via le lien « gérer ce champ », puis de modifier la valeur des labels et le type de saisie de ce champ.
Créer des saisies et des vues
Vous pouvez créer vos propres éléments de formulaires et de vue en créant dans votre plugin ou votre dossier squelettes les répertoires extra-saisies et extra-vues. Chaque squelette présent dans ces répertoires permettra de créer une nouvelle saisie/vue.
Un certain nombre de paramètres leur sont transmis :
- le contexte d’origine du formulaire / de la page en cours,
-
champ_extra: nom du champ, -
label_extra: label du champ, -
valeur_extra: valeur du champ, -
erreur_extra: erreur du champ, -
precisions_extra: précisions du champ, -
obligatoire_extra: champ obligatoire ?
Par exemple, la saisie ligne qui affiche une balise HTML input type=text s’affiche avec le fichier ligne.html comme ceci :
- <li class="editer_[(#ENV{champ_extra})][ (#ENV{obligatoire_extra})][ (#ENV{erreur_extra}|oui)erreur]">
- <label for="#ENV{champ_extra}">#ENV{label_extra}</label>
- [<span class='erreur_message'>(#ENV**{erreur_extra})</span>]
- [<p class="explication">(#ENV{precisions_extra})</p>]
- <input type='text' class='text' name='#ENV{champ_extra}' id='#ENV{champ_extra}' value="#ENV{valeur_extra}" />
- </li>
Afficher les champs multiples avec #LISTER_VALEURS
Les saisies de type "enum", "case" ou "radio" enregistrent en base de données les clés des listes de saisie et non leurs valeurs. Pour obtenir leurs valeurs, vous pouvez utiliser la balise #LISTER_VALEURS (Version de cextras >= 1.0.0) qui prend 1 ou 2 arguments :
- nom : un texte obligatoirement ; ne peux pas être une balise
#GET{nom}par exemple. - séparateur : un séparateur optionnel (par défaut : ", ").
Exemple :
Soit le tableau suivant d’un champ extra "voiture" de type "case" :
Si vous cochez les 2 premiers vous obtiendrez dans un squelette :
- #VOITURE : R19,R21
- #LISTER_VALEURS{voitures} : Renault 19, Renault 21
- #LISTER_VALEURS{voitures, " / "} : Renault 19 / Renault 21
- #LISTER_VALEURS**{voitures} : Array
- En fait un tableau précisément comme ceci :
- array(
- 'R19' => 'Renault 19',
- 'R21' => 'Renault 21'
- )
Migrer des « Champs Extras » aux « Champs Extras 2 »
Les plugins « extras » et « extras2 » sont compatibles : il est donc possible d’ajouter des champs supplémentaires tout en conservant ses champs extras à l’ancienne.
Toutefois, le plugin « interface » comporte un utilitaire de migration des anciens champs « extras » vers les champs « extras2 ». On y accède en appelant la page ecrire/?exec=conversion_extras.
Cet utilitaire liste les champs extras définis par un $GLOBALS['champs_extras'] dans le fichier mes_options.php, et, pour chacun, signale le nombre d’objets (articles, brèves...) pour lesquels ce champ existe et a une valeur non nulle. Vous pouvez alors saisir le nom du champ extras2 vers lequel vous souhaitez migrer ces données. Après vérification de l’existence du champ en question, les données seront supprimées du champ extra à l’ancienne, et recopiées dans le champ extras2 nouvelle manière.
Restrictions d’affichage des champs (expérimental)
Depuis le début du plugin, de façon expérimentale, il existe un moyen de restreindre l’affichage des champs en fonction d’autorisations spécifiques. Deux noms d’autorisations distinctes existent : voirextra et modifierextra. Le premier permet de montrer ou non le champ dans la vue du formulaire, le second dans la saisie.
Ils s’utilisent comme ceci, en créant des fonctions adéquates d’autorisations :
- function autoriser_nomtable_nomchamp_voirextra($faire, $type, $id, $qui, $opt){}
- function autoriser_nomtable_nomchamp_modifierextra($faire, $type, $id, $qui, $opt){}
Exemple :
Pour afficher un champ "ville" de l’objet "article" uniquement dans la rubrique 9, on glissera dans le fichier config/mes_options.php :
- function autoriser_article_ville_modifierextra_dist($faire, $type, $id, $qui, $opt){
- $id_rubrique = $opt['contexte']['id_rubrique'];
- if (!$id_rubrique) {
- }
- if ($id_rubrique == 9) {
- return true;
- }
- return false;
- }
- function autoriser_article_ville_voirextra_dist($faire, $type, $id, $qui, $opt) {
- return autoriser('modifierextra', $type, $id, $qui, $opt);
- }
API simplifiée de restrictions d’affichage des champs (expérimental)
La version 1.5.0 de cextras introduit une fonction restreindre_extras pour faciliter les restrictions habituelles des champs, c’est à dire définis en fonction de la rubrique à laquelle ils appartiennent.
Ces fonctions sont a placer dans le fichier squelettes/mes_fonctions.php. Leur rôle est de créer "à la volée" les fonctions d’autorisations adequates décrites plus haut.
Pour leur bon fonctionnement, il est nécessaire de charger la librairie inc/cextras_autoriser.
Les arguments de cette fonction sont sont :
- objet incriminé (article, rubrique, mot, site...)
- nom du/des champ(s) extras
- identifiants de restriction (par défaut des rubriques)
- cible (par défaut ’rubrique’, mais peut être ’secteur’ ou ’groupe’)
- recursif (false par défaut) (applique t’on aux éléments enfants ?)
Un exemple de fichier d’autorisation et diverses autorisations :
- <?php
- include_spip('inc/cextras_autoriser');
- // restreindre le champ 'gamma' des articles, sur la rubrique 2
- restreindre_extras('article', 'gamma', 2);
- // restreindre le champ 'alpha' et 'beta' des articles, sur les rubriques 2 et 3
- // restreindre le champ 'iota' des rubriques, sur la rubrique 37
- restreindre_extras('rubrique', 'iota', 37);
- // restreindre le champ 'iota' des rubriques, sur la rubrique 37 et ses sous rubriques
- restreindre_extras('rubrique', 'iota', 37, 'rubrique', true);
- // restreindre les champs 'alpha' et 'beta' des articles, sur les rubriques 37 et 38 et leurs enfants
- // lorsqu'on veut appliquer sur un secteur, preferer 'secteur' plutot que rubriques recursive. Pour restreindre au secteur 2 :
- restreindre_extras('article', 'beta', 2, 'secteur');
- ?>
Un argument supplémentaire permet donc de définir la fonction qui fera la recherche de validité, et vaut par défaut ’rubrique’, ce qui charge la fonction inc_restreindre_extras_sur_{rubrique}_dist. Le plugin supporte aussi secteur et groupemot :
- // restreindre les champs 'motin' et 'moteur' des mots, sur le groupe 2
Notes :
- Par soucis d’optimisation (moins de requetes SQL), il est préférable de regrouper en 1 seul appel au lieu de plusieurs lorsque c’est possible,
- Il n’est pas possible de définir 2 restrictions différentes pour un même champ extra.
- // impossible (seul le 1er est pris en compte) :
- restreindre_extras('article', 'c1', 1);
- restreindre_extras('article', 'c1', 2);
- // Utiliser :
- // Mais grouper les champs dés que c'est possible (même identifiants d'application). Si :
- // Préférer :
Plugins compatibles avec les Champs Extras 2
La version 0.9 du plugin champs extras 2 permet d’étendre la liste des objets gérés. Des plugins peuvent donc déclarer un objet extensible via le pipeline "objets_extensibles" (à la condition que l’objet traverse un certain nombre de pipelines de SPIP).
Liste des plugins compatibles :
- Agenda 2.0.2+ (evenements)
- Tickets 1.5.1 (tickets)
- Médiathèque 1.1 (documents)
- Vu 0.3+ (vu_annonces, vu_evenements, vu_publications)
- Banniere 0.22+ (bannieres)





Plugin Champs Extras 2
Vos commentaires
# Le 26 août à 20:52, par poupougnac
Bonjour,
Je partage avec vous une méthode qui concerne les autorisations des champs et qui devrait rendre service à beaucoup de monde. Si vous n’utilisez certains champs que pour certain(e)s articles/rubriques, le systèmes des autorisations vous force à éditer le fichier mes_options.php si vous souhaitez ajouter des rubriques/articles contenant ces champs par la suite.
Ma méthode utilise le plugin Compositions. Vous associez un article ou une rubrique à une composition directement dans la partie privée de votre site. Il est ensuite possible de restreindre l’affichage des champs à cette composition.
Exemple :
"galerie" est une composition qui s’applique aux rubriques. Le champs supplémentaire "couleur_galerie" permet d’appliquer une couleur.
Vous souhaitez évidemment que l’on puisse ajouter des galeries par la suite.
Dans le fichier mes_options.php :
Inclure les API :
include_spip('inc/cextras_autoriser');include_spip('inc/compositions');
Ajouter cette fonction :
function lister_id_composition($type,$composition) {$compo = compositions_lister_utilisations($type,$composition);
foreach($compo as $elt) {
$liste[] = $elt["id"];
}
return $liste;
}
Appliquez la restriction :
restreindre_extras('rubrique', 'couleur_galerie', lister_id_composition('rubrique','galerie'));Votre champs est restreint sur cette composition.
Idée : Le plugin pourrait détecter la présence de "Composition" pour permettre par l’ajout d’un simple menu déroulant dans son interface, la composition (en fonction de son type) sur laquelle on souhaite restreindre un champs.
Répondre à ce message
# Le 26 août à 16:45, par J-PHG
Bonjour,
Je susi SPIP 2.1.1 [15871] et en mutualisé. J’ai placé le plugin dans le dossier ad hoc central et ai cherché à créer des tables via un de mes sous domaines. Le plugin créé bien la table (vérification faite via PHPmyadmin mais le plugin me répond : Problème de création du champ extra. La table est donc bien crée mais Champs Extras n’a pas enregistré cette création.
J’ai essayé de mettre le plugin dans le dossier du sous-domaine, mais même erreur.
Ce nouveau champ est prévu pour être attaché à un article et si je crée un nouvel article, le champ n’apparaît pas dans la page d’édition de l’article.
Ou est-ce que Champs Extras enregistre les tables qu’il a jouté et les définitions ?
Répondre à ce message
# Le 20 août à 17:14, par StrangeBlackHole
Ces deux plugins devraient intégrer Spip en standard !!!
merci aux auteurs
SBH
Répondre à ce message
# Le 9 août à 11:59, par drBouvierLeduc
Bonjour,
Petite question à destination de l’auteur de ce splendide plugin :
Dans l’interface, est-il prévu à long terme d’ajouter la possibilité de restreindre l’affichage des nouveaux champs à certaines rubriques ?
Je sais que c’est déjà possible en éditant le fichier "mes_options.php", mais ce serait tellement plus simple de pouvoir faire ça visuellement, à la façon du plugin "accès restreint" (quand on choisit les rubriques en accès restreint).
Voilà, merci d’avance.
Répondre à ce message
# Le 28 juillet à 20:42, par Zerocool
Est ce qu’on peut creer un champ image avec un bouton pour uploader une image sur le serveur ?
Répondre à ce message
# Le 23 juillet à 16:27, par kyomii
Bonjour !
J’utilise champ extra avec spip 2.0 et champ Champs Extras 2 depuis quelques temps et ça fonctionne très bien, pour un nouveau site j’utilise spip 2.1 et là problème ! après installation du plugin j’ai le message suivant :
1 Table SQL « POUR » inconnue ../plugins/champs_extras2/extensions/interface/prive/contenu/champs_ex tras.html _extras 52 Table SQL « POUR » inconnue ../plugins/champs_extras2/extensions/interface/prive/contenu/champs_ex tras.html _tables 3
3 Table SQL « CONDITION » inconnue ../plugins/champs_extras2/extensions/interface/prive/contenu/champs_ex tras.html _si_extras 1
4 Table SQL « POUR » inconnue ../plugins/champs_extras2/extensions/interface/prive/contenu/champs_ex tras_possibles.html _extras 5
5 Table SQL « POUR » inconnue ../plugins/champs_extras2/extensions/interface/prive/contenu/champs_ex tras_possibles.html _tables 3
6 Table SQL « CONDITION » inconnue ../plugins/champs_extras2/extensions/interface/prive/contenu/champs_ex tras_possibles.html _si_extras 1
Je ne comprends pas pourquoi...
Merci de vote aide par avance
# Le 23 juillet à 17:57, par Fil
Salut,
ces "boucles" POUR et CONDITION sont définies par le plugin Bonux. Il faut l’activer pour que ça marche.
# Le 26 juillet à 16:22, par kyomii
Bonjour
Merci de ton aide, j’ai vérifié le plugin spip bonux est bien activé, par contre j’ai constaté une erreur
sur un autre plugin installé (couteau suisse) j’ai le message suivant :
Fatal error: Call to undefined function verif_plugin() in C:\Web\dev\forums\htdocs\plugins\couteau_suisse\inc\cs_outils.php on line 21dans les versions antérieures de SPIP cette fonction existe bien, mais plus dans SPIP 2.1 ?
est-ce la raison du problème sur champ extra ?
Merci !
Répondre à ce message
# Le 17 juillet à 14:35, par joseluis
Grand plugin ! Merçi. Mais j’ai une problème, j’ai deplacé une site. J’ai sauvagardé la base de donnés avec spip et depuis je l’ai importé a le nouveau site, et les champs extras ils ne sont pas reconues :-(
Je trouve ce message :
"Error SQL 1054
Unknown column ’editorial’ in ’field list’ SELECT editorial, isbn13, isbn13_guiones, titulo_orig..."
Comme on déplace le site avec champs extras ?
Salut
# Le 23 juillet à 09:43, par Matthieu Marcillaud
Avec une sauvegarde SPIP, il faut :
- installer SPIP et ses plugins sur le nouveau site
- déclarer les champs extras nécessaires (les mêmes que sur l’ancien) : utiliser l’extension « import/export de champs extras » par exemple pour aller plus vite.
- importer le dump de l’ancien site.
Répondre à ce message
# Le 23 juillet à 01:26, par edouard
Bonjour,
existe-t-il un moyen de faire en sorte qu’un champ extra ne fonctionne que dans certaines rubriques ?
Merci :)
# Le 23 juillet à 08:59, par Matthieu Marcillaud
Oui, il « suffit » de lire la documentation, chapitre « API simplifiée de restrictions d’affichage des champs (expérimental) »
Répondre à ce message
# Le 17 juillet à 11:20, par JLuc
Extra2 est livré avec un sousplugin exemple : type d’articles
Pourtant, type d’article apparait comme bien installé, et effectivement les articles en bénéficient...
Répondre à ce message
# Le 15 juillet à 10:43, par jfefe
Salut,
J’utilise les champs extras avec le plugin interface et un plugin dans lequel sont déclarés des champs extras. Les champs sont bien installés mais je suis obligé de cliquer sur "gérer ce champ" dans l’interface des champs extras pour qu’ils apparaissent dans la fenêtre d’édition d’un article... Est-ce un comportement normal ?
# Le 15 juillet à 11:55, par Matthieu Marcillaud
Clairement : non.
Répondre à ce message