SPIP-Contrib

SPIP-Contrib

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

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

Accueil > Améliorations de l’espace privé > Champs extra > Les champs extra

Les champs extra

26 octobre 2004 – par beatnick, BoOz, chag, Christophe, GoUaRfIg !, marabbeh, marabbeh, marcopol, Michael Courcy, SpiPiwi – 13 commentaires

6 votes

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Les champs extra permettent d’enrichir les éléments traditionnels de Spip avec attributs supplémentaires.

La version actualisée de cette contribution inclue un plugin « Extra2 » : « http://www.spip-contrib.net/Champs-Extras-2 ».

-  Introduction
-  Le principe général
-  Définir les champs extra (mes_options.php3)
-  Les types de champs extras
-  Gestion avancée des champs extra (php)
-  Téléchargement
-  Discussions

Introduction

Les champs extra sont une fonctionalité officieuse [1] de Spip 1.7. Ils permettent de rajouter des champs aux éléments traditionnels de Spip sans avoir à modifier ni créer de nouvelles tables dans la base de donnée. Une fois définis, ces champs apparaissent dans la partie privée de Spip où ils peuvent être saisis au même titre que les champs standards. A la suite de quoi, l’exploitation des champs extra est faite à la manière Spip, c’est à dire qu’on peut les récupérer dans le contexte des éléments d’une boucle.

Toutefois, la définition de ces champs est spécifique. On peut au choix :

-  Définir un « tableau des extra » dans ecrire/mes_options.php3 : cette méthode est expliquée dans le présent article. Elle est relativement simple et accessible à tous, mais une connaissance préalable du langage PHP facilitera grandement les choses.

-  Utiliser un outil graphique qui rend la chose simple et intuitive. Cet outil réalisée par Michaël Courcy, est décrit dans la contribution « Interface graphique pour les extra ». Il nécessite une petite installation supplémentaire.

Les extra présentent les limitations suivantes :

-  pas de critère de tri dans les boucles
-  pas d’indexation dans le moteur de recherche

Cet article a pour but d’expliciter tous ces aspects et de vous proposer (en extra bien entendu !) quelques exemples d’utilisation.

Une seconde partie, un peu plus avancée, expose la manière de saisir des champs extra depuis la partie publique ainsi que quelques compléments PHP pour gérer les extras de manière avancée.


Première partie

Le principe général

Seuls les éléments suivants peuvent avoir des champs extra : articles, brèves, auteurs, rubriques, et mot_clés.

A chacun de ces éléments correspond une table de la base de donnée pour laquelle SPIP a prévu un champ spécial (appelons le : champ-conteneur) qui sert à contenir tous les champs-extra qu’on aura défini pour cet élément.

Comme on va le voir, cette définition de champs-extra est faite au moyen d’un tableau PHP. Celui ci va être importé ou exporté du champ-conteneur par des opérations dites de « sérialisation » [2].

Utilisation dans une boucle

Supposons que nous voulons mettre l’âge des auteurs en base de donnée. Les champs extra étant faits pour ce genre d’utilisation, nous allons donc créer un nouveau champ pour les auteurs que l’on pourra nommer age.

PNG - 18.4 ko
PNG - 12.3 ko

Sa valeur pourra alors être récupérée comme suit dans une boucle AUTEURS :

<BOUCLE_auteur(AUTEURS)>
 .................
 .................
 [(#EXTRA|age)]
</BOUCLE_auteur>

La définition des champs extra

-  Le fichier ecrire/mes_options.php3

La définition est faite au moyen de deux tableaux PHP nommés champs_extra et champs_extra_proposes qui doivent se trouver dans le fichier ecrire/mes options.php3, (à créer si besoin).

Par exemple :

////////////////////////////////////////////////////////////////////////////////////
// Pour utiliser les champs "extra", il faut installer dans le fichier
// ecrire/mes_options.php3 un tableau definissant les champs en question,
// pour chaque type d'objet (article, rubrique, breve, auteur ou mot) que
// l'on veut ainsi etendre ; utiliser dans l'espace public avec
// [(#EXTRA|nom_du_champ)]


/*

//
// Definition de tous les extras possibles
//

$GLOBALS['champs_extra'] = Array (
        'auteurs' => Array (
                        "sexe" => "ligne|brut",
                        "age" => "ligne|propre|&Acirc;ge du capitaine",
                        "biblio" => "bloc|propre|Bibliographie"
                ),

        'articles' => Array (
                        "isbn" => "ligne|typo|ISBN"
                )
        );
*/


/*

// On peut optionnellement vouloir affiner les extras :
// - pour les articles/rubriques/breves en fonction du secteur ;
// - pour les auteurs en fonction du statut
// - pour les mots-cles en fonction du groupe de mots

$GLOBALS['champs_extra_proposes'] = Array (
        'auteurs' => Array (
                // tous : par defaut
                'tous' =>  'age|sexe',
                // une biblio pour les admin (statut='0minirezo')
                '0minirezo' => 'age|sexe|biblio'
                ),

        'articles' => Array (
                // tous : par defaut
                'tous' => '',
                // 1 : id_secteur=1;
                '1' => 'isbn'
                )
        );

*/

Sans connaître PHP, la lecture n’a rien d’insurmontable.

Le premier tableau (Array) contient 3 champs extra pour l’élément ’auteurs’ (qui est lui-même un Array), le second tableau contient 1 champ pour l’élément ’articles’ alors que ’breves’ et ’rubriques’ n’ont aucun extra.

En face des champs, à droite du => on trouve les propriétés qui servent à définir la manière dont le champ va être géré (c’est à dire saisi et affiché) dans la partie privée de Spip.

Une caractéristique des extra est qu’elle offre la possibilité de limiter la portée des champs ; par exemple en restreignant un champ extra d’articles à un secteur.

Le second tableau permet optionnellement de restreindre le domaine d’application des extras :

-  pour les articles/rubriques/breves en fonction du secteur ;
-  pour les auteurs en fonction du statut [3]
-  pour les mots-cles en fonction du groupe de mots

// On peut optionnellement vouloir affiner les extras :
// - pour les articles/rubriques/breves en fonction du secteur ;
// - pour les auteurs en fonction du statut
// - pour les mots-cles en fonction du groupe de mots

$GLOBALS['champs_extra_proposes'] = Array (
        'auteurs' => Array (
                // tous : par defaut
                'tous' =>  'age|sexe',
                // une biblio pour les admin (statut='0minirezo')
                '0minirezo' => 'age|sexe|biblio'
                ),

        'articles' => Array (
                // tous : par defaut
                'tous' => '',
                // 1 : id_secteur=1;
                '1' => 'isbn'
                )
        );

Tous les auteurs disposent en plus des champs traditionnels, des champs extra age et sexe.

Si les auteurs font partie du groupe admin, ils disposent des champs extra age, sexe et biblio.

Il faut pour chaque sous-groupe définir l’ensemble des champs extra à afficher, on voit dans l’exemple qu’il faut reprendre la définition « age » et « sexe » pour les admin bien qu’elle soit déjà précisée pour le groupe « tous »

Les types de champs extras

Chapitre à compléter ;

Ici sont décrits toutes les possibilités de spécification de champs (select, ligne, filtres brut, propre...) ainsi que toutes les « règles » d’affinages.


Seconde partie

Comprendre les champs extra

Attention ceci est réservé à un public qui connait un peu SPIP et le PHP.

Comment fonctionnent les champs extra ?

Ils utilisent le principe de la sérialisation

-  La sérialisation

Dans la base de données, les différents champs extra sont enregistrés sous la forme de tableaux stockés dans un seul champ de la base de donnée. C’est possible grace à la « sérialisation ». La sérialisation consite à transformer une variable de n’importe quel type en une chaine de caractère. C’est cette chaine qui est stockée dans la base. Pour réutiliser la variable on « désérialise ». Un exemple valant les plus beaux discours...

<?php
$tableau=array(
  "titi"=>"grosminet",
  "laurel"=>"hardy",
  "starky"=>"hutch"
);

//serialisation
$tableau_serialised=serialize($tableau);

// echo $tableau_serialised nous donne à cet instant
// a:3:{s:4:"titi";s:9:"grosminet";s:6:"laurel";s:5:"hardy";s:6:"starky";s:5:"hutch";}
// Un peu criptyque, mais heureusement c'est à php de s'y retrouver, pas à nous.

$tableau2=unserialize($tableau_serialised);
//utilisation de tableau2
echo $tableau['titi'];
//ecrit grosminet
?>

Et voila vous avez récupéré votre tableau flambant neuf prêt à l’emploi.

Eh bien c’est exactement de cette manière là que marchent les extra :

Ce sont des tableaux remplis avec tout ce qu’on veut, que Spip peut stocker tout seul dans sa base de donnée, pour ensuite les ressortir quand on le lui demande.

Une fonction pour afficher un formulaire de saisie pour un groupe de champs extra choisis

Si dans un squelette je souhaite afficher certains champs de formulaire pour qu’un utilisateur puisse saisir des champs extra j’appelle

ici « inscription » correspond au groupe créé dans mes_options.php3, dans le tableau des auteurs ( champs_extra_proposes), et qui contient les différents champs à afficher pour l’inscription.

cette fonction affiche le bon formulaire en fonction de la définition du groupe de champs et du type de chacun des champs extra. (le premier paramètre, si il est renseigné, correspond à la valeur actuelle du champ extra ).

Récupérer en php la valeur d’un champs extra

Après la validation du formulaire, on recupère les valeurs choisies par l’utilisateur dans des variables du style :

ou XXX est le nom de notre extra, par exemple

Remplir ou vider en php un champs extra particulier

Après avoir récupéré l’extra qu’un utilisateur renseigné dans un formulaire, il faut l’insérer dans la base de donnée !

Grâce aux fonctions set_extra() et get_extra() de Beatnick on peut remplir puis réutiliser un champ extra en particulier.

-  Le code php des fonctions

-  Comment ça marche ?

Attention, quand on veut enregistrer un extra la fonction set_extra attend comme deuxième argument le tableau entier des extra pour l’objet, il faut donc à priori toujours faire un get_etra avant d’utiliser set_extra. Sinon on risque d’écraser d’autres extra déjà enregistrés.

On peut par exemple remplir le champs extra « abo » pour l’auteur 1. On doit donc récupérer tous les extras, modifier (ou ajouter) le champ abo, puis enregistrer les extras.

Voyons enfin comment resortir la valeur de l’extra « abo » du tableau « auteurs » pour l’auteur 1. Ca peut servir pour un script php.

(vous avez remarqué que les types d’extra sont au singulier (auteur)).

*** Astuce pour les malins ***
Si on décide de ne pas déclarer un champ extra dans mes_options.php3, le champ en question ne sera pas affiché dans le site, mais rien n’empèche de le remplir quand même.
On peut ainsi stocker des valeurs dans la base de donnée en toute discrétion sans avoir à créer de nouveaux champs ordinaires dans la base de donnée. Et sans que les auteurs des articles ne soient perturbés par ces informations suplémentaires.
***

Notes

[1fonctionnalité officieuse : les extras marchent parfaitement, mais le développement n’en est pas fini. Les développeurs ne garantissent pas que la fonctionnalité sera préservée telle quelle dans les versions futures, qui pourront donc ne pas être compatible sur ce point ci. Si vous vous en servez, c’est à vos risques et périls pour les prochains upgrade !

[2(voir la deuxième partie)

[3(ou plus généralement d’un groupe arbitraire)

Dernière modification de cette page le 17 mars 2011

Retour en haut de la page

Vos commentaires

  • Le 2 avril 2011 à 01:32, par ? En réponse à : Les champs extra

    bonjour, connaissez-vous une astuce pour pouvoir attribuer des champs extra à certaines rubriques et pas à d’autres ?

    Mon site regroupe plusieurs type d’articles : évènements, annonces, reportages, articles d’information.
    Pour le moment je n’ai qu’un seul formulaire avec beaucoup de champ extra, je pense que cette solution serait d’un grand secours aux sites du même tyoe que le mien.

    Merci beaucoup pour votre aide !

    Clem

    • Le 4 avril 2012 à 16:45, par maxime En réponse à : Les champs extra

      ben il suffit d’ajouter une condition .

      if((isset($_GET[’id_rubrique’]) && $_GET[’id_rubrique’] == 4) || $row[’id_rubrique’] == 4 || (isset($_GET[’page’]) && $_GET[’page’] == ’agenda’))
      $GLOBALS[’champs_extra’] = Array (
      ’articles’ => Array (
      « fieldset debut on »etc.....etc....

    Répondre à ce message

  • Le 9 juillet 2009 à 15:57, par jetta En réponse à : Les champs extra

    Pour avoir les champs sous formes de liste déroulante ( énumération).
    Regarder le texte d’aide en début du fichier /ecrire/inc/extra.php
    Mettre se contenu dans ecrire/mes_options.php3 ( le cré si inexistant).
    Ensuite pour tester par exemple rendez vous à la page de création d’un auteur ( ou article) en principe les champs concernés tel que décrits dans votre fichier mes_options.php3 apparaitront.

    Répondre à ce message

  • Le 2 juillet 2009 à 20:28, par Plouc En réponse à : Les champs extra

    Version 2.0.x

    downloader le plugins « champs_extra » http://plugins.spip.net/Champs-extra

    et ce qui était auparavant dans config/mes_options.php va dans plugins/champs_extras/extras_options.php

    Ça fonctionne très bien !

    Répondre à ce message

  • Le 22 décembre 2008 à 08:59, par gilcot En réponse à : semble fonctionner avec la v 2.0

    ... à condition d’installer le plug-in champs_extra : http://plugins.spip.net/Champs-extra (cette fonctionnalité n’est en effet plus dans le core de SPIP)...

    Répondre à ce message

  • Le 27 novembre 2008 à 11:48, par daniel anic En réponse à : lien intro hs (interface graphique pour les champs extra)

    lien intro hs (interface graphique pour les champs extra)
    le bon lien

    Répondre à ce message

  • Le 27 novembre 2008 à 11:48, par FireWolf En réponse à : Les champs extra

    Bonjour,

    Je commence juste a découvrir SPIP et les plugins must . Super boulot avec les champs extra qui peuvent donner une possibilité en plus de personnaliser SPIP selon les projets.

    Cela dit je me demandais si les auteurs envisagent l’intégration d’une interface graphique pour faciliter encore plus le travail des débutants en PHP.

    Je vois qu’il y a eu un contrib dans ce sens, mais qui malheureusement semble ne plus être maintenu ou porté pour les derniers versions (1.9.2/2.0).

    Merci pour les infos supplémentaires que vous pouvez porter a ma question.

    Répondre à ce message

  • Le 13 août 2008 à 15:10, par ? En réponse à : Les champs extra

    ou est ce que je peut trouver des détails sur le type des champs extra. Je souhaiterai utiliser des check box et autres éléments mais je ne sais pas comment utiliser les type ; propre, select, nombre,... il semble qu’il y a deux parametres mis en pipe mais je n’arrives pas à trouver de doc dessus

    Répondre à ce message

  • Le 11 septembre 2006 à 13:43, par mmmx En réponse à : Les champs extra e spip 1.9

    I can’t make work extra.zip with spip 1.9.
    Where can I find documentation and examples for extra fields in spip 1.9 ???

    Répondre à ce message

  • Le 24 décembre 2005 à 17:37, par Noplay En réponse à : SPIP 1.8.2

    Attention la syntaxe a changer :

    http://article.gmane.org/gmane.comp...

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

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

  • Plugin Logo SVG : pouvoir utiliser des logos SVG

    17 octobre – commentaires

    Le SVG est un format vectoriel donc très léger et redimensionnable sans pertes, mais SPIP ne l’acceptait pas sur les logos. Ce plugin comble ce manque. Comment ça fonctionne ? Vous installez ce plugin, vous l’activez, et c’est tout. Crédits Une (...)

  • Utilisez le framework Foundation dans vos squelettes !

    13 août 2013 – 58 commentaires

    Foundation est un framework CSS et Javascript très complet pour réaliser des sites sur une grille propre et homogène. Mais surtout, il permet de rendre un site responsive très facilement ! Ce plugin ajoute le framework Foundation sur l’espace (...)

  • LinkCheck : vérificateur de liens

    13 février 2015 – 65 commentaires

    Ce plugin permet de chercher et tester l’ensemble des liens présents dans les objets. Vous pourrez donc en quelques clics connaître les liens brisés ou défectueux qui se sont immiscés dans le contenu de votre site SPIP. La vérification s’effectue en (...)

  • GIS 4

    11 août 2012 – 1288 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 (...)

  • Metas +

    3 décembre – commentaires

    Améliorez l’indexation de vos articles dans les moteurs et leur affichage sur les réseaux sociaux grâce aux métadonnées Dublin Core, Open Graph et Twitter Card. Installation Activer le plugin dans le menu dédié. Dans le panel de configuration, (...)