Carnet Wiki

Des forums sur tous les objets, pour spip 2

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.

plugin forum_objets_spip2

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.

Attention :
-  bien qu’opérationnel sur certains sites, ce plugin est un chantier est inachevé.
-  le développement de ce plugin a cessé dans la version 2.1 au profit de l’intégration de cette fonctionnalité en base dans SPIP 3
-  il est nécessaire pour s’en servir d’être autonome en php et SPIP
-  il est probable que vos demande de support ne trouvent pas de réponse en cas de pépin.

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).

Installation du plugin de la zone

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.

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]. 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 :

Plugin PluForEv (exemple pour utilisation de forum_objets_spip2)

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

[1nous n’avons pas réussi à redéfinir un pipeline sans cet artifice

[2Il serait utile ici d’avoir pipeline pour étendre le tableau des objets possibles (comme il n’y en avait un pour forum_objets_depuis_env).

Le logo de cet article est une création de Alessandro Rei, et est diffusé sous licence GPL.

didrome , JLuc - Mise à jour :6 December 2019 at 22:43