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.
Tout d’abord, installer le plugin présent sur la zone
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 »
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;
}
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));
}
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).
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 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 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