var Phenix = function () {
Troll du Web depuis 1996

Utiliser les forums de #SPIP sur d’autres types d’objets

Parce que dans SPIP, il n’y a pas que des articles !

J’en ai marre de ne jamais me souvenir de cette procédure donc je vais la noter une bonne fois pour toutes :’-) .

Procédure :

Il faut déclarer quelques petites choses pour réussir à implémenter les forums de SPIP sur d’autres objets que les articles :

On commence par définir la fonction qui permet au formulaire de forum de trouver le titre de l’objet. Mettons que vous ayez un plugin qui définit un objet « annexe » sur lequel vous voulez utiliser les forums :

Dans le fichier de fonctions.php du plugin :

  1. /**
  2.  * Récupérer le titre des annexes pour les forums
  3.  *
  4.  * @param int $id_objet
  5.  * @access public
  6.  * @return string le titre de l'annexe
  7.  */
  8. function annexe_forum_extraire_titre($id_objet) {
  9.         include_spip('inc/filtres');
  10.         return generer_info_entite($id_objet, 'annexe', 'titre');
  11. }

Ensuite, il faut définir le pipeline qui va permettre à la balise #FORMULAIRE_FORUM de trouver automatiquement l’objet du forum :

Dans le fichier pipelines.php :

  1. function prefix_forum_objets_depuis_env($objets) {
  2.         $objets['annexe'] = id_table_objet('annexe');
  3.         return $objets;
  4. }

On n’oublie pas d’ajouter le pipeline dans le paquet.xml :

  1. <pipeline nom="forum_objets_depuis_env" inclure="prefix_pipelines.php" />

Dans le cas où les forums sont désactivés partout, on peut forcer le passage avec une fonction à déclarer dans le fichier inc/annexe_accepter_forums_publics.php :

  1. function inc_annexe_accepter_forums_publics_dist($arg = null) {
  2.         return 'abo'; // chaine de 3 caractere parmi 'non','pos','pri','abo'
  3. }

Normalement à ce stade, la balise #FORMULAIRE_FORUM affiche le formulaire sur votre objet :).

Il ne faut pas oublier d’ajouter le critère {id_annexe ?} dans la boucle principale des forums et dans celle qui compte les messages. Sans quoi, SPIP va afficher tous les messages sans distinction.

Limitation :

Il y a cependant une configuration qui ne fonctionne pas correctement :

Si les forums sont désactivés sur les articles, il est impossible d’utiliser le mécanisme de réponse car #PARAMETRES_FORUM ne renvoie rien.
Le problème vient de cette partie du code, qui est spécifique à la configuration des articles.
Il est toujours possible de faire une surcharge brutale de la balise pour faire sauter cette limitation. Mais, du coup, le formulaire de configuration de l’admin n’a plus aucun sens.

Conclusion :

Les forums de SPIP ne sont pas encore complètement portables sur d’autres objets. Il y a visiblement eu du travail dans ce sens, mais ce n’est pas encore complet.
Cependant, il suffit souvent d’activer les forums d’articles pour que tout se passe pour le mieux.

2 Messages

  • Utiliser les forums de #SPIP sur d’autres types d’objets

    Le 9 novembre 2016 à 15:35 par Eric

    Bonjour Phenix,

    J’ai essayé la solution que tu proposes mais je n’arrive pas à ajouter le forum sur l’objet evenement du plugin agenda (spip 3.1).

    J’ai bien ajouté le code
    *- function evenement_forum_extraire_titre... dans fonctions.php du plugin agenda,
    *- function prefix_forum_objets_depuis_env... dans pipelines.php du plugin agenda,
    *- <pipeline nom="forum_objets_depuis_env" inclure="prefix_pipelines.php" /> ... dans paquet.xml du plugin agenda...

    Les forums sont activés partout. J’ai même coché l’objet Événements dans... ecrire/ ?exec=configurer_forum...

    L’outil forum apparaît bien dans les articles mais pas dans les événements.

    Une solution ??....

    Merci

    Répondre à ce message
    • Utiliser les forums de #SPIP sur d’autres types d’objets

      Le 10 novembre 2016 à 18:42 par Phenix

      Houla tu fais tout comme il ne faut pas.

      Première chose, on ne modifie jamais directement un plugin. Sauf si on veut mettre tout cela sur spip-zone, mais je doute que ce soit le cas ici.

      On fait des surcharges de fonction, de fichier ou de filtre.

      Si tu modifies directement un plugin tu t’interdis de faite de le mettre à jour.

      Ensuite, j’ai l’impression que tu as simplement copier/coller les codes d’exemple. Ils doivent être adapté en fonction du plugin (le prefix entre autre).

      Et enfin, ce n’est pas magique, il faut surcharger le squelette de l’objet pour y introduire les squelettes du forum, sans quoi, tout le code d’exemple est inutile.

      Répondre à ce message
Un message, un commentaire ?
modération a priori

Ce forum est modéré a priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.

Qui êtes-vous ?
Votre message
  • Pour créer des paragraphes, laissez simplement des lignes vides.