Version 12 — Décembre 2019 — 78.242.xx.xx
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 : voir Des forums sur tous les objets, pour spip 3
Un plugin expérimental permet d’ores et déjà d’intégrer cette souplesse à SPIP 2.1 : forum_objets_spip2. 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, dés SPIP 2.1.
Nous livrons avec cette documentation un ZIP du plugin forum_objets_spip2-> dans sa version 1.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). Son source est accessible sur la zone.
Cette documentation prend comme support mon témoignage d’utilisation de ce plugin pour bénéficier des forums sur des objets « évènements » (rien à voir avec le plugin agenda cependant).
Tout d’abord, récupérer le plugin sur la zone au moyen de votre outil SVN favori ou utilisez le zip lié ci dessus.
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]. Dans notre cas, nous l’avons 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]
Le plugin minimal résultant est donné ici à titre d’exemple :
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