Carnet Wiki

Des Les forums sur tous les objets , version objet

Version 4 — Mai 2011 JLuc

Dans les versions de SPIP jusqu’à la 2.1, les forums prédéfinis de SPIP sont liés aux objets traditionnels de SPIP : articles, rubriques, brèves... Dans les versions ultérieures par contre, la gestion des forums sera ouverte à tous type d’objets éditoriaux. Les forums sont alors stockés dans une table ayant comme index un duo « objet / id_objet ».

Un plugin permet d’ores et déjà d’intégrer cette souplesse à SPIP 2.1. Voici des indications pour l’utiliser afin d’utiliser les forums sur tous les types d’objets éditoriaux que vous désirerez introduire dans SPIP. C’est en fait mon témoignage d’utilisation de ce plugin pour bénéficier des forums sur des objets « évènements » (rien à voir avec agenda cependant).

Nous livrons avec Un plugin permet d’ores et déjà d’intégrer cette documentation un ZIP du plugin forum dans sa version 1 souplesse à SPIP 2 .1.2 du 6 Mai 2011, mais pour en récupérer une version plus récente, il vous faudra vous servir d’un client SVN (voir [La Zone Facile->http://www.spip-contrib.net/La-Zone-Facile]). Son source est accessible sur la zone.

Cette documentation n’est pas destinée aux novices : il est nécessaire de se servir d’un client SVN. (voir La Zone Facile)

Installation du plugin de la zone

Tout d’abord, récupérer le plugin sur la zone au moyen de votre outil SVN favori.

Adaptation sur votre site

Dans l’exemple donné ici, l’adaptation proposée est faite pour intégrer le forum sur des objets qui servent à la gestion d’évènements. Ces objets ont pour nom « evenement » et comme nom d’identifiant dans la base de donnée « id_evenement ».
Attention : il n’y a aucun rapport avec le plugin Agenda.

Compléter le pipeline forum_objets_depuis_env

Ce pipeline renvoie les couples (objet => id_objet) des objets qui utilisent les forums sur votre site. Il faut y ajouter les vôtres.

La déclaration est faite dans le fichier balises/formulaire_forum.php. Par défaut celle-ci est :

$objets = pipeline('forum_objets_depuis_env', array(
	'article' => id_table_objet('article'),
	'rubrique' => id_table_objet('rubrique'),
	'site' => id_table_objet('site'),
	'breve' => id_table_objet('breve')
));

Pour compléter ce pipeline, il fallait passer par la création d’un plugin [1]. Je l’ai appelé pluforev.

Dans le fichier plugin.xml de notre plugin, nous avons déclaré la définition du pipeline :

<plugin>
   <nom>pluforev - Ajout de la gestion des évènements au plugin forum</nom>
   <auteur> </auteur>
   <licence> </licence>
   <description>
	Des forums pour les évènements (définition du pipeline “forum_objets_depuis_env” du plugin forum).
   </description>
   <prefix>pluforev</prefix>
   <options>pluforev_options.php</options>


<pipeline>
       <nom>forum_objets_depuis_env</nom>
       <inclure>pluforev_pipelines.php</inclure>
   </pipeline>
</plugin>

Le code de pluforev_pipelines.php lui-même est :

function pluforev_forum_objets_depuis_env($objets){
   $objets['evenement'] = 'id_evenement';
   return $objets;
}

Création d’un fichier inc/evenement_forum_extraire_titre.php

Cette étape est nécessaire si la table sur laquelle on veut appliquer les forums n’est pas déclarée dans spip : elle permet à SPIP de récupérer le « titre » de vos objets, ou son équivalent.

Créez un fichier dont le nom doit être : objet+_forum_extraire_titre.php, à placer dans le répertoire votrerepertoiresquelettes/inc

Ce fichier définit une fonction nommée inc_+objet+_forum_extraire_titre. Fonction appelée dans le plugin forum en ligne 210 du fichier balise/formulaire_forum.php.
Cette fonction retourne le titre de l’objet passé en paramètre.

Pour ma gestion d’évènements, le contenu de ce fichier est :

function inc_evenement_forum_extraire_titre($id) {
    return $titre = sql_getfetsel('titre', 'spip_evenements', 'id_evenement=' . intval($id));
}

Surcharger la fonction inc_forum_insert

Reprendre la fonction inc_forum_insert du fichier forum/inc/forum_insert.php, puis modifier son contenu dans le fichier pluforev_options.php

Dans la version actuelle du plugin forum, c’est la ligne n°106 qui est à modifier.

Par exemple pour l’ajout des évènements, on modifie ainsi la partie du code concernée :

.....
if (!$id_objet OR !$objet) {
       foreach (array('article', 'breve', 'rubrique', 'syndic', 'message','ticket', 'evenement')
       as $ob) {
           if ($id = intval(_request('id_'.$ob))) {
               $objet = $ob;
               $id_objet = $id;
           }
       }
   }
…....

 [2]

Modification des squelettes

Dans le squelette d’affichage spécifique à votre objet

Dans mon squelette d’affichage d’un événement, l’appel du forum se fait simplement par <INCLURE{fond=inclure/forum}{id_evenement} />

Dans le fichier squelette forum

-  Dans la distribution SPIP il s’agit du fichier inc-forum.html.
-  Dans ZPIP c’est inclure/forum.html

Si on veut pouvoir la restreindre à un objet passé en url seulement (un evenement dans notre cas) , il faut redéfinir ce fichier dans votre squelette et ajouter un critère aux 2 boucles sur les forums :
<BOUCLE_decompte(FORUMS) {id_evenement ?}. . .

et
<BOUCLE_forums(FORUMS) {id_evenement ?}. . .

Dans le squelette de réponse à un forum

-  Dans la dist spip, il s’agit du fichier forum.html.
-  Dans ZPIP c’est contenu/page-forum.html

Faire les ajouts nécessaire pour qu’il s’affiche bien les informations relatives à l’objet concerné lors de la réponse à un forum