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é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ée de vie</h2><p class="#EDIT{duree}">[(#DUREE|sinon{ })]</p>
<h2>Composition</h2><p class="#EDIT{composition}">[(#COMPOSITION|sinon{ })]</p>
<h2>Usage</h2><p class="#EDIT{utilisation}">[(#UTILISATION|sinon{ })]</p>
<h2>Fabrication</h2><p class="#EDIT{fabrication}">[(#FABRICATION|sinon{ })]</p>
<h2>Elimination</h2><p class="#EDIT{elimination}">[(#ELIMINATION|sinon{ })]</p>
</BOUCLE_objet4>
</div>
</B_objet4>Note : L’ajout du caractère 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.
