ACCUEIL >>  Technologies et Territoires >>  Laboratoire du libre >>  SPIP >>  Bouts de codes et développements

 

Des champs supplémentaires sous SPIP

Champs supplémentaires à la table articles + Plugin Crayons - SPIP 1.9.2

lundi 18 juin 2007 , par Patrick Vincent


La nécessité de personnaliser la structure des objets publiés sous SPIP est récurrente mais représente aujourd’hui une des limites du CMS étant donné sa difficulté de mise en oeuvre sans toucher au noyau. Proposition de solution en 4 étapes sur la base d’une expérience concrète.

 

Pour le développement du site thématique de laclasse.com LeDechetMatiere, le besoin de champs supplémentaires s’est concrétisé par la définition d’un objet "Déchet" avec des zones texte devant être complétées par les collèges pendant l’année scolaire (fabrication, composition, élimination...). Après avoir fait quelques démonstrations du plugin Crayons, s’y est ajouté le besoin de pouvoir travailler sur ces champs depuis l’espace public afin de simplifier les manipulations en classe (c’est le problème des bons plugins, ils deviennent indispensables ;).

Voici un rapide tour d’horizon des voies de personnalisation entrevues : [1]

La procédure retenue au final est la suivante : ajouter des colonnes supplémentaires à la table articles et modifier le contenu grâce aux crayons en ligne.

1. Ajouter les Champs dans la base de données

A l’aide du plugin champs homonymes, table_data ou directement à la main avec phpmyadmin installé sur votre serveur, commencez par créer les champs supplémentaires dans la table spip_articles.

Pour la troisième solution, voici le code SQL utilisé :

ALTER TABLE `spip_articles`
ADD `fabrication` LONGTEXT NOT NULL,
ADD `utilisation` LONGTEXT NOT NULL,
ADD `composition` LONGTEXT NOT NULL,
ADD `duree` TEXT NOT NULL,
ADD `elimination` LONGTEXT NOT NULL;

2. Indiquer les nouveaux champs dans mes_options.php

Modifiez le fichier /config/mes_options.php en y ajoutant la liste des champs précédemment créés :

//Ajout de champs supplémentaires
include_spip('base/serial');
$GLOBALS['tables_principales']['spip_articles']['field']=
array_merge($GLOBALS['tables_principales']['spip_articles']['field'],
  array(        'utilisation' => "longtext NOT NULL",
                           'duree' => "text NOT NULL",
                           'fabrication' => "longtext NOT NULL",
                           'composition' => "longtext NOT NULL",
                           'elimination' => "longtext NOT NULL"
                   ));

3. Inclure les champs dans les squelettes

A partir de cette étape et si votre système de publication est de version 1.9 ou plus récent, vous devez pouvoir afficher le contenu de vos champs dans vos squelettes publics en un tour de boucle :

<B_objet4>
        <div id="bloc_texte">
        [(#REM)Présence du mot clef objet : afficher les champs]
        <BOUCLE_objet4(ARTICLES){titre_mot=objet}{id_article}>
                [<h2>Dur&eacute;e de vie</h2><p>(#DUREE)</p>]
                [<h2>Composition</h2><p>#COMPOSITION</p>]
                [<h2>Usage</h2><p>(#UTILISATION)</p>]
                [<h2>Fabrication</h2><p>(#FABRICATION)</p>]
                [<h2>Elimination</h2><p>(#ELIMINATION)</p>]
        </BOUCLE_objet4>
        </div>
</B_objet4>

Notes :
- La boucle permets de filtrer par mot clef la nécessité de prendre en compte les champs supplémentaires créés (objet déchet uniquement) et d’afficher les autres articles sans cette donnée.
- Depuis SPIP 1.9 les champs et les tables supplémentaires peuvent être utilisés dans les boucles en tant que balises, objets et critères de recherche : http://www.spip.net/fr_article3368.html.

4. Publier du contenu dans les champs (1) : espace privé

Une démarche classique consiste à permettre la modification de ces champs depuis l’espace privé, comme on le ferait pour n’importe quel contenu d’article.

Il faut pour cela surcharger par le biais d’un plugin le fichier du core concerné par les champs supplémentaires :
- ecrire/action/editer_article.php dans le cas de la modification d’articles (décliner pour breve, mot, auteur)
- ecrire/inc/modifier.php dans le cas des autres objets

http://www.spip-contrib.net/Edition...

5. Publier du contenu dans les champs (2) : espace public / plugin Crayons

Nous avons préféré privilégier le plugin Crayons permettant pour les personnes autorisées. les modifications directement en ligne du contenu des champs supplémentaires.

Cette solution a aussi l’intérêt de filtrer au niveau des squelettes l’affichage des champs supplémentaires -en utilisant un mot clef ou un critère de branche- et non au niveau des pages de publication du backoffice.

Elle nécessite par contre une intervention mineure mais manuelle sur les fonctions de révision des champs dans le core en attendant que cette modification soit paramétrable à l’extérieur (variable de mes_options.php ou changement depuis le backoffice) selon Fil.

Procédure :

1. Installer le plugin Crayons depuis la zone.

2. Copier le fichier ecrire/action/editer_article.php dans plugins/crayons/action/editer_article.php. Le modifier en ajoutant la définition des champs supplémentaires à la fonction revisions_articles :

        $r = modifier_contenu('article', $id_article,
        array(
        'champs' => array(
        'surtitre', 'titre', 'soustitre', 'descriptif',
        'nom_site', 'url_site', 'chapo', 'texte', 'ps',        'url_propre'
        //Modification Erasme - ajout des champs
        , 'fabrication', 'duree', 'elimination', 'composition', 'utilisation'
        //Fin modification
        ),
        'nonvide' => array('titre' => _T('info_sans_titre')),
        'invalideur' => $invalideur,
        'indexation' => $indexation
        ),
        $c);

3. Modifier le squelette article.html pour permettre aux Crayons de fonctionner depuis l’espace public :

<B_objet4>
        <div id="bloc_texte">
        <BOUCLE_objet4(ARTICLES){titre_mot=objet}{id_article}>
                <h2>Dur&eacute;e de vie</h2><p class="#EDIT{duree}">[(#DUREE|sinon{&nbsp;})]</p>
                <h2>Composition</h2><p class="#EDIT{composition}">[(#COMPOSITION|sinon{&nbsp;})]</p>
                <h2>Usage</h2><p class="#EDIT{utilisation}">[(#UTILISATION|sinon{&nbsp;})]</p>
                <h2>Fabrication</h2><p class="#EDIT{fabrication}">[(#FABRICATION|sinon{&nbsp;})]</p>
                <h2>Elimination</h2><p class="#EDIT{elimination}">[(#ELIMINATION|sinon{&nbsp;})]</p>
        </BOUCLE_objet4>
        </div>
</B_objet4>

Note : L’ajout du caractère &nbsp; permets la modification du champ même si celui-ci est vide.

Un exemple est consultable à la page : http://ledechetmatiere.laclasse.com...

Merci à Toggg et Fil pour leur aide dans la résolution des différents problèmes rencontrés.

 


[1]
- Etendre les champs de la table article en utilisant les champs extra

Les champs extra permettent de stocker plusieurs champs accompagnés de leurs valeurs de manière sérialisée dans un seul champ de la BDD. Ils ne nécessitent donc pas de modification du core ni de la base et sont configurables via le fichier /config/mes_options.php. Néanmoins ils ralentissent le traitement des données et ne représentent pas une solution pérenne. Ils ne sont de plus pas pour le moment compatibles avec le plugin Crayons.

http://www.spip-contrib.net/-Les-ch...

- Proposer des Formulaires en ligne sur mesure

L’excellent plugin Forms and Tables permets la création de formulaires riches insérables dans le corps d’un article. Chaque visiteur, rédacteur ou administrateur, peut venir contribuer au contenu du formulaire lui étant dédié afin de produire des statistiques complètes et authentifiées. Néanmoins cette solution vise à la production d’un espace de publication multiple ce qui ne réponds pas de manière directe à notre besoin.

http://www.spip-contrib.net/plugin-...

- Ajouter des colonnes supplémentaires à la table Articles Contribution ayant défriché le terrain de la solution retenue. http://www.spip-contrib.net/Edition...



Répondre à cet article





Des champs supplémentaires sous SPIP


23 août 2007, par Maelle13

Bonjour,

Sous le titre de l’article il est précisé Spip 1.9.1. Or les auteurs du plugin Crayons le disent incompatibles avec cette version. Est-ce une erreur ou avez-vous réussi à faire fonctionner les Crayons en Spip 1.9.1 ?

    Des champs supplémentaires sous SPIP
    11 novembre 2007, par Patrick

    Non vous avez raison, c’est en réalité de la 1.9.2a. Il faut bien à ma connaissance cette version de SPIP pour faire fonctionner le plugin crayons.



 

Des champs supplémentaires sous SPIP


25 juin 2007, par Vincent

Bonjour,
j’aimerais demander un renseignement à l’auteur de cette article.

Vous utilisez le plugins crayons pour modifier les nouveaux champs, soit. Mais comment faites vous pour créer un article avec les nouveaux champs ? On est donc obliger de passer par l’espace privé d’abord ?

Je n’ai pas envie que les rédacteurs accèdent à l’espace privé. Comment faire pour alors ajouter un article (ET ses nouveaux champs !) depuis l’espace public ?

Si jamais vous avez une petite idée... _Merci d’avance.

Sinon merci quand même pour cette aide.

    Des champs supplémentaires sous SPIP
    1er juillet 2007

    Bonjour,
    Il n’y a pas de moyen à ma connaissance autre qu’un développement spécifique pour permettre la création d’article vide.
    Par exemple, un bouton sur le site public qui permettrait d’insérer une nouvelle entrée dans la BDD en récupérant son ID (s’inspirer de ?exec=articles), mais celà nécessite une gestion rigoureuse des droits.
    Patrick