Carnet Wiki

Les forums, version objet

Version 2 — Mai 2011 JLuc

Dans les versions de SPIP jusqu’à la 2.1 , les Les forums prédéfinis de SPIP spip sont liés aux objets traditionnels de SPIP spip : articles, rubriques, brèves... Dans les versions ultérieures par contre , A l’avenir la gestion des forums sous spip 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à , pour permettre d’intégrer cette souplesse à SPIP cela au Spip actuel ( version 2.1. ) Son source Un plugin est accessible [sur en cours de développement , [ici sur la zone->1/plugins/forum" class="spip_url spip_out auto" rel="nofollow external">http://zone.spip.org/trac/spip-zone/browser/_core_/branches/spip-2.1/plugins/forum ]. 1/plugins/forum]

Voici des indications pour l’utiliser afin d’utiliser les forums sur de quoi l’adapter à tous les types d’objets éditoriaux que vous désirerez désirez introduire dans SPIP spip . C’est en fait mon témoignage d’utilisation de ce Ce plugin pour bénéficier des forums sur des objets «  évènements  » (rien à voir avec agenda cependant ). est malheureusement inutilisable tel quel .

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

Installation du plugin de la zone


Tout d’abord, récupérer installer [le plugin présent sur la zone->http://zone.spip.org/trac/spip-zone/browser/_core_/branches/spip-2.1/plugins/forum] au moyen de votre outil SVN favori.

Adaptation sur votre site

Dans l’exemple donné ici , l’adaptation

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 ».
 » _ Attention : il n’y a aucun rapport avec le plugin Agenda.

Compléter -* Compléter le pipeline < code>forum_objets_depuis_env</code > forum_objets_depuis_env

Ce pipeline renvoie les couples < code>(objet  : objet => id_objet)</code > des objets qui utilisent les forums sur votre site . id_objet 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.

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.
ce plugin sert juste à définir un pipeline “forum_objets_depuis_env” du plugin forum.
Dans Pipeline définie dans le fichier < code>plugin balises/formulaire_forum .xml</code > de notre plugin , nous avons déclaré la définition du pipeline  : xml

<plugin>
   <nom>pluforev - Ajout de  la  gestion  des  évènements  au plugin forum</nom>
   <auteur> </auteur>
   <licence> </licence>
   &lt;description >
	 Des  forums  pour  les  évènements  ( définition  du  pipeline  forum_objets_depuis_env  du  <description>Ajout  au  plugin forum).
    pour  la  gestion  des  evenements  ...   &lt;/description php 
   &lt;/ description >


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

Le Puis , le code de < code>pluforev_pipelines pluforev_pipelines .php</code > lui-même php est :

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

Création -* Création d’un fichier < code>inc/evenement_forum_extraire_titre squelettes/inc/evenement_forum_extraire_titre .php</code > 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 : elle permet à SPIP de récupérer le «  titre  » de vos objets , ou son équivalent .

Créez un Le nom du nouveau fichier dont le nom doit être : < code>objet+_forum_extraire_titre objet+_forum_extraire_titre .php</code >, php à placer dans le répertoire < code > votrerepertoiresquelettes/inc</code > spip squelettes/inc

Ce fichier définit une fonction nommée < code>inc_+objet+_forum_extraire_titre</code >. inc_+objet+_forum_extraire_titre . Fonction appelée dans le plugin forum en ligne 210 du fichier < code>balise/formulaire_forum balise/formulaire_forum .php</code >.
php
.
Cette fonction Elle 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 < code>inc_forum_insert</code > inc_forum_insert

Reprendre la fonction < code>inc_forum_insert</code > inc_forum_insert du fichier < code>forum/inc/forum_insert forum/inc/forum_insert .php</code >, php , puis modifier son contenu dans le fichier < code>pluforev_options mes_options .php</code > 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;
           }
       }
   }
…....

 [serait  (…)" id="nh2">2] ).

Modification des squelettes

Dans

Modification des squelettes

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

Dans Par exemple dans mon squelette d’affichage d’un événement, l’appel du forum se fait simplement par <code><INCLUREfond=inclure/forumid_evenement var>

&lt;INCLURE{fond=inclure/forum}{id_evenement}  />&lt;/code> &lt;/var >


{{  -*  Dans le fichier squelette forum }} forum 


-  Dans la distribution SPIP  spip  il s'agit du fichier &lt; code>inc-forum {inc-forum .html&lt;/code >.
 html }. - Dans ZPIP c'est <code>inclure/forum.html

Dans zpip, c’est inclure/forum.html

Si on veut pouvoir la restreindre à un 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 :
<code><BOUCLE_decompte(FORUMS var>

&lt;BOUCLE_decompte(FORUMS ) {id_evenement ?}. . .&lt;/code }  …&lt;/ code > &lt;/var >


et
&lt;code>&lt;BOUCLE_forums(FORUMS var><code>&lt;BOUCLE_forums(FORUMS ) {id_evenement ?}.  }  …. . .&lt;/code> &lt;/var >


{{  -*  Dans le squelette de réponse à un forum}} forum 


-  Dans la dist spip, il s'agit du fichier &lt; code>forum {forum .html&lt;/code >.
 html }. - Dans ZPIP c'est <code>contenu/page-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.