SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

286 Plugins, 197 contribs sur SPIP-Zone, 524 visiteurs en ce moment

Accueil > Améliorations de l’espace privé > Champs extra > Champs Extras 2

Champs Extras 2

9 janvier 2009 – par Fil, Jean-Baptiste Pressac, Matthieu Marcillaud – 824 commentaires

205 votes

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 (nécessite les plugin Saisies et Bonux).
  • 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.
PNG - 57.2 ko
Champs Extras 2
Page récapitulative des éléments
PNG - 14.7 ko
Champs Extras 2
3 champs ajoutés sur les articles.

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 :

  1. define(’_ID_WEBMESTRES’,1:743:99);

Exemple 1 : ajout d’un prénom sur un auteur

Nous allons créer un champ ’prenom’ sur les auteurs de SPIP.

PNG - 22.7 ko
Affichage du nouveau champ « Prénom » en bas du formulaire de saisie d’un auteur.

Pour cela, il faut aller dans « Configuration > Champs Extras » et cliquer l’icône « Créer un champ extra ».

PNG - 171.6 ko
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 ». Notez que les champs devront être saisis sans accents ni espaces (les espaces sont à remplacer de préférence par des _). La valeur du champ supplémentaire pourra être affichée dans un squelette avec la balise #PRENOM ;
  • Objet éditorial  : Table sur laquelle s’applique ce champ, ici « Auteurs » ;
  • Label de la saisie : Correspond au nom qui s’affichera dans le formulaire d’édition et dans un squelette avec la balise [(#CHAMP_EXTRA{champ, label})]. Dans cet exemple, saisir « Prénom ». Si vous voulez saisir le label du champ avec ses traductions, voir plus bas "Afficher les labels des champs".
  • 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 saisie textarea), un élément à deux entrées oui ou non, etc. Ces éléments sont définis dans le dossier extra-saisies/. De la même maniere, le dossier extra-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, les boutons radio ou les sélections. Il faut les indiquer dans ce champ quand nécessaire.
  • Champ obligatoire  : Le champ doit-il être obligatoirement renseigné par l’auteur ?
  • Recherche  : Cocher cette case si le champ soit être inclu au moteur de recherche ;
  • 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é. On pourrait aussi mettre dans ce cas varchar(30) NOT NULL DEFAULT ''
  • Traitements automatiques  : Cochez cette case si la saisie contient des raccourcis typographiques ou des chaines de langues.
  • Explication de la saisie : Affiché dans le formulaire de saisie du champ. Ici, ce n’est pas nécessaire, mais dans d’autres cas, ce pourrait être par exemple « Cocher aux moins deux éléments sur les quatre proposés ». Un code de langue peut aussi être utilisé, ainsi que les blocs multilingues (valable à partir de Champs Extra2 v1.10.0 et Interfaces pour Champs Extra v1.3.0) ;
  • Classe CSS  : Rajouter le nom des classes CSS, séparés par un espace, qui seront appliquées au formulaire de saisie champ. Par exemple, pour un champ de type « ligne », les classes seront rajoutées à la balise input.

À 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_AUTEUR pourra 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 :

  1. <plugin>
  2. <nom>Un auteur sur les brèves</nom>
  3. <auteur>Vous !</auteur>
  4. <licence>GNU/GPL</licence>
  5. <version>0.1</version>
  6. <version_base>0.1</version_base>
  7. <description>
  8. Ajoute un champ "id_auteur" sur les breves de SPIP.
  9. </description>
  10. <etat>stable</etat>
  11. <prefix>auteur_sur_breves</prefix>
  12. <necessite id="cextras" version="[0.8;]" />
  13. <install>base/auteur_sur_breves_install.php</install>
  14. <pipeline>
  15. <nom>declarer_champs_extras</nom>
  16. <inclure>base/auteur_sur_breves.php</inclure>
  17. </pipeline>
  18. </plugin>

Télécharger

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.

  1. <?php
  2. if (!defined("_ECRIRE_INC_VERSION")) return;
  3.  
  4. function auteur_sur_breves_declarer_champs_extras($champs = array()){
  5. $champs[] = new ChampExtra(array(
  6. 'table' => 'breve', // sur quelle table ?
  7. 'champ' => 'id_auteur', // nom sql
  8. 'label' => 'Auteur de la br&egrave;ve', // chaine de langue 'prefix:cle'
  9. 'precisions' => '', // precisions sur le champ
  10. 'obligatoire' => false, // 'oui' ou '' (ou false)
  11. 'rechercher' => false, // false, ou true ou directement la valeur de ponderation (de 1 à 8 generalement)
  12. 'type' => 'auteur', // type de saisie
  13. 'sql' => "bigint(21) NOT NULL DEFAULT 0", // declaration sql
  14. ));
  15. return $champs;
  16. }
  17. ?>

Télécharger

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 »

  1. <?php
  2. if (!defined("_ECRIRE_INC_VERSION")) return;
  3.  
  4. include_spip('inc/cextras_gerer');
  5. include_spip('base/auteur_sur_breves');
  6.  
  7. function auteur_sur_breves_upgrade($nom_meta_base_version,$version_cible){
  8. $champs = auteur_sur_breves_declarer_champs_extras();
  9. installer_champs_extras($champs, $nom_meta_base_version, $version_cible);
  10. }
  11.  
  12. function auteur_sur_breves_vider_tables($nom_meta_base_version) {
  13. $champs = auteur_sur_breves_declarer_champs_extras();
  14. desinstaller_champs_extras($champs, $nom_meta_base_version);
  15. }
  16. ?>

Télécharger

Cas des listes d’énumération :

Pour les types d’énumération, il faut indiquer un tableau PHP d’éléments clé=>valeur. Exemple :

  1. $champs[] = new ChampExtra(array(
  2. 'table' => 'rubrique', // sur quelle table ?
  3. 'champ' => 'enum', // nom sql
  4. 'label' => 'info_enum', // chaine de langue 'prefix:cle'
  5. 'type' => 'menu-cases', // type de saisie
  6. 'enum' => array(
  7. "cle1"=>"valeur1",
  8. "cle2" => "valeur2",
  9. "cle3" => "valeur3",
  10. ),
  11. 'sql' => "text NOT NULL DEFAULT ''", // declaration sql
  12. ));

Télécharger

Rien de plus...

Prendre en compte des champs déjà existants

PNG - 33 ko
Le champ « ville » créé manuellement dans la base de données apparait dans la liste des champs gérables par Extras.

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 pour Champs Extras » établit la liste les champs existants et vous signale ceux qui sont gérés par « Champs 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 de nouveaux types de saisies

Pour créer un nouveau type de saisies, il suffit de créer les deux squelettes nécessaires à la saisie et à l’affichage des champs extras qui utiliseront ce nouveau type de champ.

Ces squelettes doivent porter le même nom que le nouveau type de champ et doivent être placés dans les répertoires extra-saisies et extra-vues. Ces deux répertoires peuvent être créés dans le dossier de vos squelettes (par défaut le répertoire /squelettes) ou dans le dossier du plugin que vous développez pour rajouter des champs extras.

Par exemple, si vous utilisez le Plugin Contacts & Organisations, qui crée le nouveau type d’objet SPIP contact et que vous souhaitez créer des champs extra de type contact, vous devez créer les squelettes /squelettes/extra-saisies/contact.html et /squelettes/extra-vues/contact.html et y écrire le code nécessaire à l’affichage et à la saisie des champs extra de ce type.

Pour l’écriture des squelettes de la saisie et de la vue, vous pouvez utiliser les paramètres suivants :

  • 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 : renvoie "obligatoire" si le champ est obligatoire, une chaine vide dans le cas contraire.

Par exemple, la saisie ligne qui affiche une balise HTML input type=text s’affiche avec le fichier ligne.html comme ceci :

  1. <li class="editer_[(#ENV{champ_extra})][ (#ENV{obligatoire_extra})][ (#ENV{erreur_extra}|oui)erreur]">
  2. <label for="#ENV{champ_extra}">#ENV{label_extra}</label>
  3. [<span class='erreur_message'>(#ENV**{erreur_extra})</span>]
  4. [<p class="explication">(#ENV{precisions_extra})</p>]
  5. <input type='text' class='text' name='#ENV{champ_extra}' id='#ENV{champ_extra}' value="#ENV{valeur_extra}" />
  6. </li>

Télécharger

Afficher les champs multiples avec #LISTER_VALEURS et #LISTER_CHOIX

Les saisies de type "menu-case", "menu-enum" ou "menu-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 un ou deux arguments :

  • nom : qui doit obligatoirement être un texte, sans balises. On ne peut donc pas écrire #LISTER_VALEURS{#GET{nom}}.
  • 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 :

  1. #VOITURE : R19,R21
  2. #LISTER_VALEURS{voitures} : Renault 19, Renault 21
  3. #LISTER_VALEURS{voitures, " / "} : Renault 19 / Renault 21
  4. #LISTER_VALEURS**{voitures} : Array
  5. En fait un tableau précisément comme ceci :
  6. array(
  7. 'R19' => 'Renault 19',
  8. 'R21' => 'Renault 21'
  9. )

Télécharger

Pour afficher la liste complète des valeurs de la liste (pour permettre par exemple à l’internaute de faire un choix dans un menu déroulant), vous pouvez utiliser la balise #LISTER_CHOIX, combiné avec une boucle POUR :

  1. <BOUCLE_liste_voitures(ARTICLES){id_article}>
  2. <select name="voitures">
  3. <BOUCLE_liste(POUR){tableau #LISTER_CHOIX**{voitures}}>
  4. <option value="#CLE">#VALEUR</option>
  5. </BOUCLE_liste>
  6. </select>
  7. </BOUCLE_liste_voitures>

Télécharger

Si vous deviez utiliser cette boucle dans une rubrique, il faudrait limiter la boucle à un seul article, sinon, celle-ci répéterait l’affichage des valeurs possibles du champ autant de fois qu’il y a d’articles dans la rubrique. Cela tient à la manière dont #LISTER_CHOIX**{champ} est calculée pour l’instant.

  1. <BOUCLE_liste_voitures(ARTICLES){id_article}{0,1}>
  2. <select name="voitures">
  3. <BOUCLE_liste(POUR){tableau #LISTER_CHOIX**{voitures}}>
  4. <option value="#CLE">#VALEUR</option>
  5. </BOUCLE_liste>
  6. </select>
  7. </BOUCLE_liste_voitures>

Télécharger

Afficher les champs de type auteur ou auteurs

Les saisies de type "auteur" ou "auteurs" enregistrent en base de données les identifiants du ou des auteurs choisit et non le(s) nom(s) de(s) auteur(s).

Si vous créez un champ de type "auteur" sur les articles, par exemple "responsable" vous devez passer par une boucle de type AUTEURS pour afficher le nom du responsable sur la page de l’article (notez l’utilisation du critère {tous} qui permet d’afficher des auteurs qui n’ont pas rédigé d’articles) :

  1. <BOUCLE_article(ARTICLES){id_article}>
  2. <BOUCLE_responsable(AUTEURS){id_auteur=#RESPONSABLE}{tous}>
  3. #NOM
  4. </BOUCLE_responsable>
  5. </BOUCLE_article>

Télécharger

Dans le cas où le champ est de type "auteurs" et se nomme "responsables", la boucle devient :

  1. <BOUCLE_article(ARTICLES){id_article}>
  2. <BOUCLE_responsables(AUTEURS){id_auteurs IN (#RESPONSABLES|explode{","})}{tous}>
  3. #NOM
  4. </BOUCLE_responsables>
  5. </BOUCLE_article>

Télécharger

En effet, #RESPONSABLES contient les identifiants des auteurs séléctionnés, séparés par des virgules.

Toujours dans le cas où vous auriez créé un champ "responsables" de type "auteurs", pour afficher la liste des articles auquels ont été affectés un responsable donné, vous pouvez utiliser la boucle suivante :

  1. <BOUCLE_articles(ARTICLES){responsables == #VAL{'(^|,)'}|concat{#ID_AUTEUR,'($|,)'} }>
  2. #TITRE
  3. </BOUCLE_articles>

Télécharger

Afficher les labels des champs

Pour afficher le label d’un champ dans un squelette, vous pouvez utiliser la balise [(#CHAMP_EXTRA{nom_du_champ, label})].

Cette balise doit être écrite à l’intérieur d’une boucle correspondant au type de l’objet auquel a été rajouté le champ. Par exemple, si vous avez rajouté un champ prenom aux auteurs, vous pouvez afficher le label du champ et sa valeur par une boucle du type :

  1. <BOUCLE_personne(AUTEURS){id_auteur}>
  2. [(#CHAMP_EXTRA{prenom, label}) : ][(#PRENOM)]
  3. </BOUCLE_personne>

Télécharger

Pour saisir les traductions d’un label, vous pouvez saisir un code de langue <:code_langue:> ou <:plugin:code_langue:> ou un bloc multilingue pour saisir la traduction dans différentes langues [1]. Par exemple <multi>[fr]Prénom[en]First name</multi>.

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 :

  1. function autoriser_nomtable_nomchamp_voirextra($faire, $type, $id, $qui, $opt){}
  2. function autoriser_nomtable_nomchamp_modifierextra($faire, $type, $id, $qui, $opt){}

Télécharger

Exemple :

Pour afficher un champ "ville" de l’objet "article" uniquement dans la rubrique 9, on glissera dans le fichier config/mes_options.php :

  1. function autoriser_article_ville_modifierextra_dist($faire, $type, $id, $qui, $opt){
  2. $id_rubrique = $opt['contexte']['id_rubrique'];
  3. if (!$id_rubrique) {
  4. $id_rubrique = sql_getfetsel("id_rubrique", "spip_articles", "id_article=".intval($id));
  5. }
  6. if ($id_rubrique == 9) {
  7. return true;
  8. }
  9. return false;
  10. }
  11.  
  12. function autoriser_article_ville_voirextra_dist($faire, $type, $id, $qui, $opt) {
  13. return autoriser('modifierextra', $type, $id, $qui, $opt);
  14. }

Télécharger

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 :

  1. objet incriminé (article, rubrique, mot, site...)
  2. nom du/des champ(s) extras
  3. identifiants de restriction (par défaut des rubriques)
  4. cible (par défaut ’rubrique’, mais peut être ’secteur’ ou ’groupe’)
  5. recursif (false par défaut) (applique t’on aux éléments enfants ?)

Un exemple de fichier d’autorisation et diverses autorisations :

  1. <?php
  2. include_spip('inc/cextras_autoriser');
  3.  
  4. // restreindre le champ 'gamma' des articles, sur la rubrique 2
  5. restreindre_extras('article', 'gamma', 2);
  6. // restreindre le champ 'alpha' et 'beta' des articles, sur les rubriques 2 et 3
  7. restreindre_extras('article', array('alpha', 'beta'), array(2, 3));
  8. // restreindre le champ 'iota' des rubriques, sur la rubrique 37
  9. restreindre_extras('rubrique', 'iota', 37);
  10. // restreindre le champ 'iota' des rubriques, sur la rubrique 37 et ses sous rubriques
  11. restreindre_extras('rubrique', 'iota', 37, 'rubrique', true);
  12. // restreindre les champs 'alpha' et 'beta' des articles, sur les rubriques 37 et 38 et leurs enfants
  13. restreindre_extras('article', array('alpha', 'beta'), array(37, 38), 'rubrique', true);
  14. // lorsqu'on veut appliquer sur un secteur, preferer 'secteur' plutot que rubriques recursive. Pour restreindre au secteur 2 :
  15. restreindre_extras('article', 'beta', 2, 'secteur');
  16.  
  17. ?>

Télécharger

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 :

  1. // restreindre les champs 'motin' et 'moteur' des mots, sur le groupe 2
  2. restreindre_extras('mot', array('motin', 'moteur'), 3, 'groupemot');

Télécharger

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.
    1. // impossible (seul le 1er est pris en compte) :
    2. restreindre_extras('article', 'c1', 1);
    3. restreindre_extras('article', 'c1', 2);
    4. // Utiliser :
    5. restreindre_extras('article', 'c1', array(1, 2));
    6.  
    7. // Mais grouper les champs dés que c'est possible (même identifiants d'application). Si :
    8. restreindre_extras('article', 'c1', array(1, 2));
    9. restreindre_extras('article', 'c2', array(1, 2));
    10. // Préférer :
    11. restreindre_extras('article', array('c1', 'c2'), array(1, 2));

    Télécharger

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 :

Voir en ligne : http://plugins.spip.net/cextras

Notes

[1L’utilisation des blocs multilingue pour la saisie et l’affichage du label et de l’explication d’un champ extra est valable à partir de Champs Extra2 v1.10.0 et Interfaces pour Champs Extra v1.3.0).

Dernière modification de cette page le 11 juin 2012

Retour en haut de la page

Tout afficher

Vos commentaires

  • Le 27 novembre 2014 à 17:11, par Polar oïd En réponse à : Champs Extras 2

    Bonjour, une question, soit un champ extra de type oui_non appliqué à l’objet « auteurs », comment faire un sorte que ce bouton soit affiché dans un squelette de type « mon profil » accessible en session et modifiable par l’utilisateur logé ? Je débute avec ce plugin et me pose les questions suivantes

    1 comment appeler le champ extra spécifique dans un squelette accessible en session ?
    2 comment autoriser la modification de ce champ spécifique par l’utilisateur logé ?

    Avez-vous des pistes à ce sujet ? Merci d’avance ! ;)

    Répondre à ce message

  • Le 14 août 2014 à 21:28, par DanielQuisbert En réponse à : Champs Extras 2

    greetings,

    I need to add fields to datetime 2.4.10 GIS plugin, I did this documentation but still do not have the fields I need.
    I added the necessary code in the / GIS database, but using champ extras2 interface does not display the table spip_gis ..
    Anyone have any suggestions, thanks in advance.

    Répondre à ce message

  • Le 16 juillet 2014 à 12:05, par ADB En réponse à : Champs Extras 2

    Bonjour
    Mes articles utilisent les champs extra depuis longtemps. Et j’ai constaté, en passant à Spip 2.1 que les champs_extra n’étaient pas visibles ou pris en compte dans la partie privée.
    Après recherche, j’ai constaté que le pb venait du fichier action/editer_article qui limite la saisie aux champs Spip.
    Je l’ai donc patché en ajoutant les intitulés de mes champs extra, comme suit :

    function articles_set($id_article, $set=null)
    $err = ’’ ;
    // unifier $texte en cas de texte trop long
    trop_longs_articles() ;

    $c = array() ;
    foreach (array(
    ’surtitre’, ’titre’, ’soustitre’, ’descriptif’,
    ’nom_site’, ’url_site’, ’chapo’, ’texte’, ’ps’
    //patch ADB
    , ’latitude’, ’longitude’, ’cartes’, ’zone_meteo’, ’capitainerie’, ’secours’, ’freq_radio’, ’distances’, ’svce_meteo’, ’jour’, ’nuit’, ’dangers’, ’feux’, ’acces’, ’te’, ’places’, ’equipement’, ’services’, ’avitaillement’, ’location’, ’svce_divers’, ’tourisme’, ’mouillage’, ’decor’
    // fin patch ADB
    ) as $champ)
    $c[$champ] = _request($champ,$set) ;

    De ce fait les champs extra sont remplis.

    Comment faire pour éviter d’avoir à patcher le fichier Spip éditer_article à chaque mise à jour de Spip ?

    • Le 16 juillet 2014 à 16:11, par Matthieu Marcillaud En réponse à : Champs Extras 2

      cf : http://core.spip.org/issues/3039

      1) non le problème ne vient pas de articles_set() qu’on se le dise.
      2) le problème vient donc… d’ailleurs. reste à trouver où.
      3) tes champs extras sont ils toujours « gérés » dans l’interface de gestion des champs extras ?
      4) es-tu certain que c’est suite à la migration (de quoi vers SPIP 2.1) que tu as un problème ?
      5) n’as tu pas récemment ajouté un champ de plus par exemple ? (ce qui peut jouer sur l’apparition d’un bug, notamment avec la longueur du champ ’valeur’ de spip_meta.

    • Le 16 juillet 2014 à 19:16, par ADB En réponse à : Champs Extras 2

      1) si ça ne vient pas de là, pourquoi mon patch corrige-t-il définitivement le pb ?
      2) bien d’accord
      3) oui
      4) oui, depuis la 1.8 vers la 2.1
      5) Non

      Merci

    • Le 16 juillet 2014 à 21:56, par Matthieu Marcillaud En réponse à : Champs Extras 2

      Pour le 1. Oui ton patch « corrige » si on veut… mais tu comprends bien qu’on ne peut pas mettre ce patch dans SPIP directement, puisqu’il concerne tes propres champs à toi. D’autre part, je t’assure que le plugin champs extras fonctionne bien en 2.1 ; je viens de tester à l’instant chez moi la création d’un champ « zone_meteo » sur mes articles. Le champ est correctement géré et enregistré.

      Je ne comprends pas le point 4. Ce plugin champs extras n’existait pas en 1.8. Comment faisais-tu donc sur cette version antérieure ?

      Quelles étapes as-tu fait pour gérer les champs en spip 2.1 ?

    • Le 16 juillet 2014 à 22:24, par ADB En réponse à : Champs Extras 2

      Bien sûr que mon patch n’est pas applicable. Mais peut-être un array des champs extras inséré à cet endroit résoudrait le pb.
      Tous mes champs extras existent depuis longtemps. Pour les appeler, c’était [(#EXTRA|extranom)]
      Avec dans mes_options, un GLOBAL array pour tous les champs extra, un inc_extra, etc.
      $GLOBALS[’champs_extra’] = Array(
      ’articles’=>Array(
      « synopsis »=>« bloc|propre|Synopsis
      (c’est le seul élément de votre article qui apparaîtra dans la partie publique)||| »,
      « prixpiges »=>« ligne|propre|Prix demandé (brut, le feuillet)||| »,
      « Frais »=>« ligne|propre|Frais de rédaction||| »,
      « isbn »=>« ligne|typo|ISBN||| »,
      ),

      Quand je suis passé en 2.1, les tables ont été reprises et converties sans pb.
      Mais c à partir de la 2, je crois, que j’ai dû patcher pour les voir apparaître en partie privée.
      Maintenant que j’ai trouvé une solution, ça me va.
      Mais comme il semble que d’autres ici ont poisté aussi sur un pb d’adaptation, sauf si j’ai mal compris, j’ai posté.
       :)

    Répondre à ce message

  • Le 12 novembre 2013 à 09:57, par Fennec72 En réponse à : Champs Extras 2

    en spip 3.0.13
    Bug lors du vidage du cache.


    Taille du répertoire cache

    Fatal error : Call to undefined function cextras_declarer_tables_objets_sql() in /web/chateaudevillai/www/plugins/auto/cextras/v3.2.6/cextras_options.php on line 39

    SPIP essaie de limiter la taille du répertoire du cache de ce site à environ 10 Mo de données. (Ce paramètre est modifiable par le webmestre du site.)


    Répondre à ce message

  • Le 29 octobre 2013 à 12:07, par dut En réponse à : Champs Extras 2

    Je passe la valeur d’un champ de forumulaire dans l’URL
    ex : /spip.php ?page=mod_evenement&id_article=357
    cela permet une initialisation différente selon le lien par lequel on est arrivé.

    J’aimerai de la même façon initialiser un champ extra dans ce formulaire par une valeur passée en URL. Dans mes premiers essai, ça marche pas. Peux-être que j’ai raté quelque chose.

    Merci de vos pistes éventuelles.

    Répondre à ce message

  • Le 24 septembre 2009 à 00:16, par ? En réponse à : Champs Extras 2

    Bonjour,
    lorsque l’inteface des champs extra est activée sur mon site en test (sur 1and1). aucune modification ou enregistrement d’un article est possible. Après avoir cliqué sur sauvegardé, je tombe sur un article sans titre ou sur un article inchangé. Lorsque je désactive l’interface.. ça marche à nouveau... Mais mes champs extra n’apparaissent plus....

    En local par contre, (vertrigo) ça marche ultra impeccable du tonnerre de de feu de dieu.

    SPIP 2.0.9
    plugins installés. Bonux, CS, crayons, cfg, et bien sûr : champs extra2 et interface pour champs extra.

    y a t-il un pré-requis en matière de version MySQL ou PHP ? Merci beaucoup.

    Je donnerais un suivi si je trouve une réponse. merci encore.

    • Le 25 septembre 2009 à 16:39, par Billou En réponse à : Champs Extras 2

      J’avais exactement le même problème il n’y a pas 10 minutes…

      Pire encore, d’autres choses buggaient sur le site, j’avais des pages "HTTP302 si votre navigateur ne vous redirige pas cliquez ici", des erreurs php d’envoi de header un peu partout dans l’interface privée, etc… C’était vraiment le binz’ complet.

      J’ai tenter pas mal de choses, jusqu’à en venir à nettoyer le fichier mes_options.php pour en retirer tout ce qui n’était pas nécessaire ici et le mettre dans mes_fonctions.php dans mon dossier squelette. Et là tout s’est remis en ordre, plus aucune erreur nulle part et tout fonctionne bien (pour le moment, croisons les doigts).

      Je pense que ça serait une indication nécessaire à préciser dans la doc du plugin, si tant est que ça soit vraiment la solution aux problèmes évidemment.

    • Le 25 septembre 2009 à 19:09, par Fil En réponse à : Champs Extras 2

      D’après ce que tu indiques il est clair que le problème se situait dans ton fichier mes_options ; très probablement des sauts de ligne en trop en fin de fichier. Rien à voir avec Extras2 en tous cas.

    • Le 25 septembre 2009 à 19:37, par Billou En réponse à : Champs Extras 2

      Des sauts de lignes en trop à la fin peuvent provoquer ce genre de choses ?? C’est bon à savoir.

      Je ne pense pas avoir eu des sauts de lignes intempestifs, mais j’avais pas mal de commentaires, ça joue peut-être, je ne sais pas.

    • Le 25 septembre 2009 à 23:31, par ? En réponse à : Champs Extras 2

      dans mon cas je n’ai même pas de fichiers « mes_options » ou mes fonctions...

      d’autres idées ?

      merci

    • Le 26 septembre 2009 à 01:18, par Billou En réponse à : Champs Extras 2

      Je demande ça au cas où, mais vous avez essayé en désactivant tous les plugins, mettant à jour SPIP, etc… ? Ce qui est bizarre c’est que ça fonctionne en local…

    • Le 1er octobre 2009 à 14:43, par Billou En réponse à : Champs Extras 2

      Bonjour, lorsque l’inteface des champs extra est activée sur mon site en test (sur 1and1). aucune modification ou enregistrement d’un article est possible. Après avoir cliqué sur sauvegardé, je tombe sur un article sans titre ou sur un article inchangé. Lorsque je désactive l’interface.. ça marche à nouveau... Mais mes champs extra n’apparaissent plus....

      Bon bah j’ai aussi le même problème…

      Comme d’hab les mots-clés fonctionnent sans soucis, mais les articles s’enregistrent vides dès que des champs leur sont associés, et si c’est un article où il n’y a pas de champs associés, ça ne s’enregistre même pas, ça tourne en boucle sur la page de modification.

      Va-t-on finir par s’en sortir un jour…

    • Le 1er octobre 2009 à 16:03, par Matthieu Marcillaud En réponse à : Champs Extras 2

      Va falloir que tu m’aides Billou parce que bon… j’ai jamais réussi à reproduire ça.

      • quels plugins actifs ?
      • quels logs dans tmp/ sont générés ? (les supprimer juste avant d’enregistrer l’article pour voir ce qui est produit)
      • quelle version de php ?
    • Le 1er octobre 2009 à 16:34, par Billou En réponse à : Champs Extras 2

      La liste des plugins actifs est longue, mais sache que même en les désactivant tous, sauf Bonux évidemment, rien ne change. Je peux te fournir la liste si vraiment tu penses que même désactivé, ça peut continuer à jouer.

      Ma version de PHP : 5.2.5-pl1-gentoo

      Pour les logs de spip, je te l’envoie par mail vu la taille, mais apparemment il y a plein d’erreurs par rapport au fait qu’il ne trouve pas les champs dans la base de données :

      Oct 01 16:28:30 XX.XXX.XX.XXX (pid 3975) trouver_table: table inconnue '' 'article'

      C’est rempli d’erreurs de ce genre.

    • Le 1er octobre 2009 à 16:45, par Matthieu Marcillaud En réponse à : Champs Extras 2

      Merci pour ton fichier de log. Ce qui bug n’est pas le trouver_table… mais bien l’erreur SQL du dessous :

      1. UNKNOWN COLUMN 'label_annee_creation' IN 'field list' -
      2. SELECT titre, label_pays, label_annee_creation, label_enactivite, label_parent, label_specialite
      3. FROM `terukipa`.spip_articles

      Télécharger

      As-tu des accents ou une casse différente dans ce que tu as créé ? le champ en question est-il toujours visible dans Interface ?

    • Le 1er octobre 2009 à 17:02, par Billou En réponse à : Champs Extras 2

      La fameuse erreur MySQL 1054…

      Je n’ai d’accents que dans le label de la saisie, pas dans le nom du champ. Pareil pour la casse.

      Dans Champs Extra 2 dans l’onglet Configuration j’ai bel et bien tous les champs qui sont là.

      C’est avec ta question que je me suis rappelé d’une chose. Je me souviens que tout au début de mon utilisation de ce plugin, j’avais remarqué que des noms de champs avec un underscore posaient problèmes, mais il me semblait que c’était dans l’affichage même des champs, pas dans la validation d’un article. Or je viens de faire un test à l’instant : j’ai désassocier tous les champs qui étaient reliés aux articles, et j’en ai créé un sans underscore dans le nom de champ. Et là je vous le donne en mille… Ca refonctionne.

      Je vais tous les refaire de cette manière pour voir, mais il semblerait à première vue que le plugin (ou autre ?) aie du mal à gérer les underscore dans certains cas.

    • Le 1er octobre 2009 à 17:50, par Matthieu Marcillaud En réponse à : Champs Extras 2

      Groumf…

      Je ne pense pas que ça vienne de ça. Du moins, je viens de retester encore et ça tourne là… Il y a un truc qui nous échappe.

      Tu voyais ton champ défini dans l’interface, mais il n’existait pas en bdd donc ?

    • Le 1er octobre 2009 à 19:26, par Billou En réponse à : Champs Extras 2

      Zut… Comme ils ne fonctionnaient pas, je les ai supprimé.

      Mais en effet, maintenant que ça fonctionne, même si je rajoute des champs avec un underscore ils fonctionnent eux aussi. Même chose en désassociant les autres…

      Je n’ai pas non plus réussi à reproduire le problème sur un site de test. Par contre je suis sûr que si je repartais de zéro sur le site où j’ai eu le soucis, ça recommencerait vu que j’ai déjà eu le coup au départ.

      Est-ce que ça pourrait venir d’une version spécifique de MySQL ou de quelque chose du genre ?

    Répondre à ce message

  • Le 21 septembre 2013 à 23:38, par Polar oïd En réponse à : Champs Extras 2

    Bonjour, je rencontre une problème qui n’a pas encoure été soulevé me semble-t-il.

    Pour un besoin spécifique, j’ajoute un champ extra de type bloc dans l’objet article de spip + barre typographique soit : #TEXTE_2.

    Tout fonctionne correctement sauf concernant les notes de bas de page :)

    En effet, si je commande une note dans le champ texte natif plus une autre dans mon champ extra, j’obtiens bien deux notes mais elles comportent toutes deux la meme numérotation (ici 1 et 1)... il en résulte que la seconde note est inactive et son contenu n’est pas retourné par la balise #NOTES.

    Comment résoudre ce problème ?

    Répondre à ce message

  • Le 11 août 2013 à 00:55, par ADB En réponse à : Champs Extras 2

    Bonjour
    J’ai créé un formulaire qui me permettait (sous Spip 1.8) de remplir tous les champs de ma fiche, y compris les champs extra.
    En passant à Spip 2.1, et en utilisant le nouveau mode de formulaire, seuls les champs Spip se remplissent et pas les champs extra.
    L’appel piur l’insertion est le suivant :

            include_spip('action/editer_article');
            if ($id_article = insert_article($id_article)) {
                    articles_set($id_article,
                    array
                    ('titre'=>$titre, 'soustitre'=>$soustitre, ''latitude'=>$lat, 'longitude'=>$lon, 'distances'=>$dist, ...))}

    Comment faire ?
    Merci

    Répondre à ce message

  • Le 3 juillet 2013 à 16:07, par ADB En réponse à : Champs Extras 2

    Bonjour
    Je m’aperçois avec désespoir qu’à chaque restauration, 1 table ou toutes, la définition de mes Champs_Extra est remise à zéro et qu’il faut tout recommencer. Je ne sais pas d’où cela vient car il me semble qu’il n’y a a priori aucune raison pour cela.
    Comment cela se fait-il ?
    Merci pour votre réponse

    • Le 3 juillet 2013 à 16:22, par Matthieu Marcillaud En réponse à : Champs Extras 2

      Les définitions des champs extras sont données dans une meta (table spip_meta). Lors d’une restauration, la table en question est remplacée par le contenu de la sauvegarde.

      Si c’est les champs extras contenus dans la sauvegarde que tu perds, je crois (en spip 2.x) qu’il faut lancer la restauration 2 fois de suite. Ou utiliser une sauvegarde mysql directement et la restaurer. Cet inconvénient est résolu en SPIP 3.

    • Le 3 juillet 2013 à 18:56, par ADB En réponse à : Champs Extras 2

      Merci pour la réponse rapîde.
      En revanche, j’ai bien copié le champ iextras avec bonnes définitions de la table meta dans le champ aux mauvaises définitions de la nouvelle table mais cela n’a rien modifié dans l’interface Champs Extra de l’espace privé.
      La « mise à jour » ne doit pas être prise en compte directement.

    Répondre à ce message

  • Le 2 juillet 2013 à 15:28, par ADB En réponse à : Champs Extras 2

    Bonjour
    Dans quel fichier se trouve la définition des labels des champs extra.
    Je ne sais pas comment ni pourquoi, tous les labels créés ont disparu.
    Merci

    • Le 3 juillet 2013 à 16:25, par Matthieu Marcillaud En réponse à : Champs Extras 2

      Table SQL spip_meta, clé ’iextras’ de mémoire, pour les champs créés depuis l’interface des champs extras.

    Répondre à ce message

Répondre à cet article

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 Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Tutoriel : créer une carte interactive avec GIS4

    19 octobre 2013 – 17 commentaires

    Utilisation de quelques fonctions javascript pour créer des interactions avec une carte GIS. L’objet de ce tutoriel est de produire une carte interactive comme celle-ci Effacer tous les points d’une carte d’une carte La fonction javascript (...)

  • AnythingSlider version 2.x.x

    19 décembre 2012 – 69 commentaires

    Ce plugin permet d’utiliser aisément le script AnythingSlider dans ses squelettes. ATTENTION : plugin pour utilisateur averti. Note : le numéro de version du plugin est différent du numéro de version du script embarqué. Note de version (...)

  • Champs Extras 3

    16 janvier 2012 – 498 commentaires

    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 (...)

  • Magnet

    2 décembre 2014 – commentaires

    Le plugin Magnet permet d’aimanter des articles pour les forcer à apparaître en tête dans les listes et sélections d’articles. C’est l’équivalent de l’option « Sticky » des post Wordpress. Mise en œuvre Il suffit d’installer le plugin pour qu"il soit (...)

  • GIS 4

    11 août 2012 – 1184 commentaires

    Présentation et nouveautés La version 4 de GIS abandonne la libraire Mapstraction au profit de Leaflet. Cette librairie permet de s’affranchir des librairies propriétaires tout en gardant les mêmes fonctionnalités, elle propose même de nouvelles (...)