SPIP - Contrib

SPIP - Contrib

[ar] [en] [es] [fr] [it]

74 visiteurs en ce moment

fontsizeup fontsizedown
Accueil du site > Contribs > Interactivité, communication > Syndication > Syndiquer par mot-clef ou par langue > Plugin « Syndiquer par mot-clef ou par langue » (spip 1.9)
[6 commentaires]

Plugin « Syndiquer par mot-clef ou par langue » (spip 1.9)

MàJ pour 1.9 / 1.9.1 / 1.9.2 alpha et pluginisation d’une "bidouille" créée à l’origine pour un spip 1.7.2

dimanche 22 octobre 2006, par romain (aka LeJamaisContent !)

  • Digg
  • Del.icio.us
  • Facebook
  • Google
  • Technorati
0 vote

La distrib standard offre la possibilité de syndiquer des sites rubrique par rubrique. Au prix d’une courte modif, on peut avoir une syndication en fonction d’un mot-clef ou de la langue de rédaction des articles. Si vous préférez, vous pouvez tester l’effet produit (strictement identique) en installant la version ’plugin’ qui est jointe à cet article.


[*La modif de backend.html et de exec/synchro.php *]


situation

Je gère un site "maman_poule" dans lequel je souhaite faire apparaître les productions de sites "poussins".

Problème : les contenus des différentes rubriques de ces sites ne sont pas tous exempts de... scories (les productions des poussins en difficultés sont parfois surprenantes... dans leur diversité) et le nombre de rubriques y est volontairement restreint.

Dans ces conditions, décider de syndiquer c’est donc choisir entre tout-ou-rien et/ou bloquer-débloquer les liens un par un tous les soirs...

solution proposée : syndiquer les mot-clef

préparation :

  • 1/ sur chaque site poussin, je crée si ce n’est déjà fait un dossier "squelettes" à la racine du site
  • 2/ je recopie le "backend.html" du dossier "dist" dans mon dossier "squelettes"
  • 3/ dans le dossier squelettes, je renomme backend.html en backend-mots.html

ensuite,

  • 4/ j’édite backend-mots.html :

je remplace

par

ainsi que

par


    • Quelques explications...
      • Dans la version d’origine, le critère branche retourne l’ensemble des articles de la rubrique ET de ses sous-rubriques. Comme il n’est pas possible d’appeler directement une branche en faisant par exemple branche=42 on passe la valeur de branche via l’environnement lors de l’appel de la fonction.
      • Dans la version modifiée, s’agissant de mots-clefs et plus de rubriques, on pourrait écrire l’ID du mot clef qui nous intéresse "en dur" mais ça ne serait guère souple. Il est bien plus facile d’utiliser là encore le " ?", c’est à dire de faire une boucle générique puis, lors de l’appel de celle-ci, d’indiquer la valeur à mettre dans notre variable d’environnement.

  • 5/ enfin, je sauvegarde le tout et l’uploade en ftp sur le site poussins
  • 6/ Là, je note le numéro d’id (xxx) du mot que je veux syndiquer (www.le_site_poussin.net/spip.php ?motxxx)
  • 7/ puis, dans le site "maman_poule", je syndique le site poussin avec un lien vers "spip.php ?page=backend-mots&id_mot=xxx

Syndication par Mot_clef


pour aller un chouillat plus loin

Nous allons rendre la sélection de ces nouveaux backend accessibles aux rédacteurs sans avoir à noter de n° d’id sur un bout de papier...

Maintenant que mon fichiers backend-mot.html est sur chaque site "poussin", il convient d’informer les rédacteurs de cette nouvelle possibilité. On va leur permettre de faire du copier/coller :

  • 8/ J’édite donc maintenant le fichier ecrire/exec/synchro.php

je repère la ligne "fin_cadre_relief() ;"

et juste au-dessus je colle :

enfin, je sauvegarde le tout et l’uploade en ftp sur les sites "poussins" et sur le site "maman_poule". Désormais, le rédacteur de passsage pourra accèder à la liste de nos "mots-clefs syndiqués" :

Syndication par mot-clef

Aller encore plus loin : la syndication par langue de rédaction

Revenons en arrière et reprenons notre fichier backend-mots.html ; on y découvre que les boucles peuvent réagir à deux critères : non seulement le critère "id_mot" (qui nous a servi pour la syndication par mot-clef) mais aussi le critère "lang".
Nous tenons ici la possibilité de créer facilement une autre forme de syndication reposant, celle-ci sur la langue de rédaction des articles.

je repère donc la ligne "fin_cadre_relief() ;// fin du hack"
et juste en dessous, je colle :

L’oeil averti relèvera la syntaxe de notre requête MySql dans laquelle le critère DISTINCT nous permet l’économie d’un tas de code. En effet, cette simple instruction permet, comme son nom l’indique, de ne ramener QUE les langues différentes.

l'utilisateur peut ne syndiquer que les articles rédigés dans une certaine langue


[*La mise en Plugin*]


Considérations de départ

Bidouiller un fichier de ecrire/exec, comme nous venons de le faire ci-dessus, c’est bien. Le problème, c’est qu’en cas de mise à jour de la distrib spip, il faut se souvenir du (ou des) fichiers qu’on a modifié pour ne pas les écraser. La mise en "plugin" permet tout d’abord d’éviter ce genre problème. _ En outre, les plugins peuvent être à volonté activés / désactivés, ce qui évite bien des manip fastidieuses.
Alors... on y retourne !

Récupérer un modèle

Pour commencer, nous allons récupérer un modèle de plugin sur svn ://zone.spip.org/spip-zone/ (le "plugin_template"). C’est en éditant son contenu et en virant ce qui ne nous est pas utile qu’on va créer notre plugin connexion.

Editer plugin.xml

Ce fichier est fourni avec des indications assez claires sur sa structure. Pour l’essentiel, il suffit donc de mettre le nom du plugin, celui de l’auteur, la version et la description dans les balises du même nom.

Les éléments plus "sensibles" sont :

    • la balise "options"
      Le documentation indique que le fichier options (comme l’ancien mes_options.php) sera chargé a chaque hit. C’est donc bien à elle que nous devons nous atteler puisque, si nous voulons savoir quels sont les mots-clefs ’syndicables’, il faut recalculer.
      La balise "options" prendra donc la forme suivante :

Bien sûr, comme indiqué dans la doc, nous inventons pour ce fichier un nom unique (surtout pas mes_options.php). C’est dans ce fichier "synchronisation_par_mots_clefs_options.php" que nous copierons tout simplement la totalité de notre fichier ecrire/exec/synchro.php modifié (tout simplement). _ 

    • La balise "fonctions" :
      Comme nous n’en avons pas besoin, elle restera vide. On peut aussi la supprimer tout simplement. _ 
    • La balise "prefixe" :
      Là encore la doc fournit des indications précises et claires : pas d’ambiguité dans le nom qui doit être unique et sera repris dans toutes nos fonctions. Ici on reste simple :
    • La balise "pipeline" :
      C’est le coeur du truc. C’est le pipeline, aussi appelé point d’entrée, qui nous permet d’altérer le fonctionnement standard de spip. La liste des pipelines déjà prévus dans spip peut être étudiée dans inc_version. Là, comme nous cherchons à altérer le fonctionnement d’un fichier de ecrire/exec en entier, nous allons retenir uniquement le pipeline "body_prive".

La doc indique que l’on peut se dispenser de "inclure". Nous allons néanmoins indiquer expressément le nom de ce fichier (et tout de suite après l’éditer).

Editer "template_pipelines_admin.php"

Avant d’aller plus loin, nous renommons ce fichier sous le nom que nous avons indiqué dans plugin.xml, c’est à dire "synchronisation_par_mots_clefs_pipelines_admin.php".
En l’éditant, nous découvrons que plusieurs fonctions ont été prévues. La plupart ne nous servant à rien, nous les effaçons pour arriver au code suivant :

Editer "template_options.php"

Avant d’aller plus loin, nous renommons ce fichier sous le nom que nous avons indiqué dans plugin.xml, c’est à dire "synchronisation_par_mots_clefs_options.php".
En l’éditant, nous découvrons... qu’il est vide !
Super !
On va y copier/coller la totalité du fichier ecrire/exec/synchro.php que nous avons modifié selon nos besoins dans la première partie de cet article.

Et ensuite ?

et ensuite,... c’est fini (ou presque). Nous pouvons effacer les fichiers templates qui ne servent à rien dans notre cas (template_fonctions, template_pipelines_cron, template_pipelines_typo et template_pipelines_public).
Nous avons donc un plugin tout neuf composé de 4 fichiers :

    • gpl_fr.txt : (pour la license)
    • plugin.xml
    • synchronisation_par_mots_clefs_pipelines_admin.php
    • synchronisation_par_mots_clefs_options.php

Si ce n’est déjà fait, on crée un dossier "plugins" à la racine du spip. On y crée ensuite un sous-dossier "synchronisation_par_mots_clefs" (ou ce que vous voulez, a priori ça n’est pas critique). On y glisse nos quatre fichiers.

Rajouter le fichier "backend-mots.html

Pour que tout fonctionne comme prévu, il ne nous reste plus qu’à recopier le fichier ’backend-moots.html’ dans le répertoire de notre plugin, au même niveaux que nos quatres fichiers.

Pour faire fonctionner la chose

Dans l’interface privée, les bouton "Configuration" fait alors apparaître un "Gestion des plugins" qui nous permet d’activer notre plugin. On s’en rend compte aussitôt en allant sur la page "Suivre la vie du site" dont le fonctionnement est désormais modifié tant que le plugin est activé.

Retour en haut de la page

6 Messages de forum

Voir toute la discussion

  • Répondre à ce message

    15 avril 17:31 , par Stampy88

    Bonjour, Je viens de faire la même chose, et lorsque je vais dans "Suivre la vie du site", dans le bloc "Syndicalisation par mots clé" je n’ai que ce texte :

    "Vous pouvez aussi limiter la syndication aux thèmes qui vous intéressent :"

    sans aucun mot clé en dessous. Je suis sur la version 1.9.2d

    Quelqu’un pourrait-il m’aider ? ce sont mes tout début avec SPIP :)

  • Répondre à ce message

    31 mars 11:38 , par romain

    Aucune idée :-)
    J’ai très peu de temps à consacrer à Spip en ce moment, mais dès que possible, je jette un oeil là-dessus.

  • Répondre à ce message

    27 mars 20:45 , par archi02

    Bonjour,

    Je ne suis pas encore très calé en spip, d’où ma question.

    Comment puis-je faire si je veux modifier le titre des flux des rubriques ou des mots clé ? Par exemple pour faire en sorte que le titre du flux indique : le nom du site comme actuellement, mais suivi du nom de la rubrique ou du mot-clé en question.

    Merci !

  • Répondre à ce message

    25 octobre 2007 18:38 , par Hada de La Luna

    Bonjour,  ;o)

    J’ai mis ce très intéressant plugin dans le dossier plugins d’un Spip 1.9.2b...

    J’ai activé le plugin...

    Et dans le backend, il s’affiche :

    Syndication par mot-clef

    Vous pouvez aussi limiter la syndication aux thèmes qui vous intéressent :

    Syndication selon la langue des articles

    Vous pouvez aussi limiter la syndication aux articles d’une certaine langue.

    Actuellement dans ce site, il y a des articles rédigés en :

    • RSS fr

    Alors le site étant franco-français, c’est bon de ce coté là, mais mes 18 mots clefs je ne les voit pas du tout...

    Une piste pour résoudre ce mystère ? J’ai loupé une marche en installant ?

    Merci d’avance de vos réponses :o)

  • Répondre à ce message

    16 juillet 2007 18:24 , par livier

    A mon humble point de vue la modification du fichier ’backend.html’ de la distribution ne se justifie pas pour faire fonctionner la syndication par mot_clef. La présence du filtre id_mot ? fait l’affaire, et le trrait du filtre branche ? ne fait que d’enlever la possibilité de syndiquer aussi une rubrique et ses sous rubriques au cas ou un utilisateur le souhaiterait.

    En d’autres mots : http://le_site_poussin.net/spip.php?page=backend&motxxx et http://le_site_poussin.net/spip.php?page=backend&rubriquexxx doivent fonctinner d’origine tous les deux ... Alors, restons simples ;-)

  • Répondre à ce message

    6 juillet 2007 11:44 , par wattazoum

    hello,

    Il est magnifique ton plugin. Figure toi que j’ai failli, changer de système de publication à cause du manque d’un système de syndication par rubrique et par mot clé . Mais là tu me sauves .

    Merci beaucoup.

    PS : A mon humble avis , tu devrais intégrer ton hack dans le plugin par défaut. Ce n’est qu’un + .
    PSS : ce serait bien de rendre la liste des rubriques récursives . de sorte à ce que l’on puisse syndiquer les sous rubriques aussi .

Répondre à cet article

Retour en haut de la page

Ça discute par ici

SPIP | Squelette | | Plan du site | Suivre la vie du site RSS 2.0