Carnet Wiki

Les forums, version objet

Version 1 — Mai 2011 didrome

Les forums spip sont liés aux objets traditionnels de spip : articles, rubriques, brèves ... A l’avenir la gestion des forums sous spip sera ouverte à tous type d’objets éditoriaux.

Un plugin est en cours de développement, ici sur la zone, pour permettre d’intégrer cela au Spip actuel (version 2.1)

Ce plugin est malheureusement inutilisable tel quel. Voici de quoi l’adapter à tous types d’objets éditoriaux que vous désirez introduire dans spip.

Installation du plugin de la zone

Tout d’abord, installer le plugin présent sur la zone

Adaptation du plugin

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 »

  • Compléter le pipeline forum_objets_depuis_env

Ce pipeline renvoie les couples : objet => id_objet

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')
));

Il faut donc compléter ce pipeline. Pour cela, il faut passer par la création d’un petit plugin (2 fichiers seulement). A télécharger ici et personnalisé.
On déclare la définition du pipeline dans le plugin.xml

<plugin>
   <nom>pluforev - Ajout au plugin forum</nom>
   <auteur> </auteur>
   <licence> </licence>
   <description>Ajout au plugin forum pour la gestion des evenements ... ce plugin sert juste à définir un pipeline “forum_objets_depuis_env” du plugin forum.
   Pipeline définie dans le fichier balises/formulaire_forum.php
   </description>

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

Puis, le code de pluforev_pipelines.php est :

function pluforev_forum_objets_depuis_env($objets){
   $objets['evenement'] = 'id_evenement';
   return $objets;
}
  • Création d’un fichier squelettes/inc/evenement_forum_extraire_titre.php

Cette étape est nécessaire si la table (dans la base de données) sur laquelle on veut appliquer les forums n’est pas déclarée dans spip.

Le nom du nouveau fichier doit être : objet+_forum_extraire_titre.php à placer dans le répertoire spip squelettes/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.
Elle retourne le titre de l’objet passé en paramètre.

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

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 mes_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;
           }
       }
   }
…....

Il manque ici un pipeline ici pour étendre le tableau des objets possibles (comme il n’y en avait un pour forum_objets_depuis_env).

Modification des squelettes

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

Par exemple 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 seulement (evenement dans notre cas) , il faut 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

Ce travail est utile le temps que le plugin forum intègre ces diverses finitions de manière plus simple.