1

Le plugin « Lire aussi... »

22 juin 2008
par ARNO*

[SPIP 2.0] Certains sites ont besoin de lier ponctuellement des articles par petits groupes, de façon à pouvoir présenter des liens de type « Lire aussi... » entre ces articles.

On trouve cela désormais de manière systématique sur les sites des quotidiens. Par exemple, dans une page de rubrique du Guardian, on trouve ceci :

L’article principal est complété ici par deux « petits » articles qui lui sont liés.

Sur Libération, cela donnera par exemple :

Bien sûr, dans SPIP, on peut réaliser cela en regroupant ces articles dans une rubrique. D’accord, mais on peut très bien imaginer que ces articles n’ont pas vocation, malgré leur thème commun, à se trouver dans la même rubrique (par exemple un site structuré non selon les sujets, mais selon les contributeurs ou les types de médias). Dans ce cas, difficile de créer de tels liens.

La solution qui ne convient absolument pas, ici, consiste à créer un mot-clé pour ce petit groupe d’articles. Au niveau de la gestion du site, cela donne (j’en ai déjà vu malheureusement) des sites dotés de quelques centaines de mots-clés dont l’usage est systématiquement ponctuel. Rapidement ingérable. J’ai donc réalisé ce plugin qui permet de créer des liens entre plusieurs articles (un peu sur le modèle des liens de traduction, d’ailleurs) : c’est le plugin « Lire aussi ».

Le plugin « Lire aussi... »

Attention : ce plugin ne fonctionne que sur l’actuelle version en développement de SPIP, accessible par SVN.

Une fois installé et activé, le plugin ne nécessite aucune configuration ; en revanche, il faut modifier ses squelettes pour afficher ces nouvelles relations entre articles. Il devient immédiatement actif en ajoutant un pavé dans les pages d’articles :

Zoomons sur ce bloc :

Ici, j’entre le numéro d’un autre article, et je valide. Je réalise si nécessaire cette opération plusieurs fois, de façon à lier d’autres articles. J’obtiens ceci :

Dans la liste, il y a deux options pour chaque entrée :
- en colonne de gauche, les petites icônes permettent de changer l’« article de référence » (comme pour les liens de traduction) ; l’article de référence est l’article principal du groupe d’articles, destiné à servir de point d’entrée ;
- en colonne de droite, la petite croix rouge pour retirer un élément de la liste.

Notez que l’interface est en AJAX et ne provoque pas de rechargement de la page lorsqu’on ajoute ou supprime des articles liés.

N’utilisez pas ce plugin

En règle générale, je conseille d’utiliser le moins de plugins possibles. Je déconseille particulièrement d’utiliser celui-ci. C’est typiquement le genre de plugin qui vous transforme un site en usine à gaz ingérable si les administrateurs ne sont pas extrêmement rigoureux.

Commencez par voir s’il n’est pas possible de réaliser ces groupes d’articles plus simplement : en croisant des mots-clés thématiques, ou en concevant la structure avec des sous-rubriques pertinentes. Dans 90% des cas, je suis certain que cela suffit largement.

Dans les 10% qui restent, commencez par essayer de vous convaincre que, de toute façon, vous n’avez pas besoin d’une telle fonctionnalité.

Les boucles

Le principe est similaire aux liens de traduction. Si un article appartient à un groupe d’articles, alors tous ces articles partagent un même champ id_lire, égal à l’id_article de l’article principal. Un article qui n’appartient pas à un groupe d’articles a simplement un id_lire de 0.

Voici comment simplement afficher les articles en « lire aussi » :

  1. <BOUCLE_principale(ARTICLES){id_article}>
  2.  
  3. <B_lire_aussi>
  4. <ul>
  5. <BOUCLE_lire_aussi(ARTICLES){id_lire=#ID_LIRE}{id_lire > 0}>
  6. <li><a href="#URL_ARTICLE">#TITRE</a></li>
  7. </BOUCLE_lire_aussi>
  8. </ul>
  9. </B_lire_aussi>
  10.  
  11. <h1>#TITRE</h1>
  12. #TEXTE
  13. </BOUCLE_principale>

Télécharger

C’est tout simple. Pour ne pas afficher l’article en cours, ou pour l’afficher sans lien, ce sont les critères habituels de ce genre de boucle, je vous laisse faire.

Voici maintenant une façon de présenter la liste des articles des rubriques, en n’affichant que les articles qui sont les principaux articles de leur groupe, ou alors qui n’appartiennent pas un groupe.

  1. <BOUCLE_principale(RUBRIQUES){id_rubrique}>
  2. <h1>#TITRE</h1>
  3.  
  4. <BOUCLE_articles(ARTICLES){id_rubrique}{par num titre}>
  5. <BOUCLE_test_lire(ARTICLES){id_article}{id_lire==^(0|#ID_ARTICLE)$}>
  6. <div><b>#ID_ARTICLE.</b> #TITRE (#ID_LIRE)</div>
  7.  
  8. <B_lire_aussi>
  9. <ul>
  10. <BOUCLE_lire_aussi(ARTICLES){id_lire > 0}{id_lire=#ID_LIRE}{par num titre}{exclus}>
  11. <li><b>#ID_ARTICLE.</b> #TITRE (#ID_LIRE)</li>
  12. </BOUCLE_lire_aussi>
  13. </ul>
  14. </B_lire_aussi>
  15. </BOUCLE_test_lire>
  16. </BOUCLE_articles>
  17. </BOUCLE_principale>

Télécharger

  • Juin 2008

    Effectivement l’un des problèmes de ce plugin c’est qu’il rajoute un type de relation à ceux déjà existant (rubriques, mots-clefs, traductions). Au lieu de chercher à centraliser.

  • ARNO*
    Juin 2008

    Au lieu de chercher à centraliser.

    Oui, mais d’un autre côté, c’est bien à cela que servent les plugins. Dans le cas où la solution générique ne répond pas aux besoins d’un site, pourquoi se priver de développer l’outil adapté ?

    À mon avis, la difficulté ensuite, c’est que tout le monde s’imagine avoir besoin d’un « outil adapté » spécifiquement à ses besoins (aux débuts de SPIP, la plupart des gens prétendaient qu’il était impossible de réaliser « leur » site avec un tel outil, parce que leurs besoins à eux étaient tellement particuliers). Ce qui est en général faux : la plupart des sites ont des besoins très basiques et génériques, c’est seulement l’ergonomie et la structuration de l’information qui ont changent, la plupart du temps il n’est pas nécessaire de modifier le type de relation.

    Mais d’un autre côté, il y a effectivement des cas où l’on a besoin de bidouilles spécifiquement adaptées. Et ce plugin en fait partie. Inutile dans 90% des cas, mais vraiment super-pratique quand vraiment on en a besoin.

    Par ailleurs, pour les « lire aussi... », je préfère largement les croisements de mots-clés : afficher les articles qui partagent le plus de mots-clés (par exemple). Mais c’est un usage tout de même différent. Que ce soit une bonne idée ou non, il y a tout de même un certain nombre de cas où le webmestre veut gérer à la main certaines relations, plutôt que de se reposer sur des automatismes (dans 30% des cas, c’est une bonne idée).

  • balluche
    Juin 2008

    bonjour,

    J’ai eu ce genre de problématique à gérer sur mon site : lier des articles entre eux par forcément sur la même rubrique. Je m’en suis sorti en créant un groupe de mots clés pour associer un article au numéro d’un autre article. Une boucle permet ensuite de les trier dans l’ordre de date. J’ai jamais publié cette astuce. L’inconvénient est bien sûr que le groupe se remplit rapidement de numéros. Du coup, je note ta solution, le jour où je mettrais à niveau mon spip ... :-(

    Voir ici comment çà fonctionne (à la fin de la page).

    <B_articles_lies>
    Pages
    <BOUCLE_articles_lies(MOTS) {id_article}{id_groupe=8}{0,1}>
    <BOUCLE_articles_lies2(ARTICLES) {id_groupe=8}{id_mot}{par date}{" | "}>
    [<(#EXPOSE{span,a href="#URL_ARTICLE"})>]
    #COMPTEUR_BOUCLE
    [</(#EXPOSE{span,a})>]
    </BOUCLE_articles_lies2>
    </BOUCLE_articles_lies>
    <br /><br />
    </B_articles_lies>
  • ARNO*
    Juin 2008

    Salut Balluche,

    en créant un groupe de mots clés pour associer un article au numéro d’un autre article.

    Je parle de cette solution, justement. Elle est viable sur un site publiant peu. Sur un site, genre site de quotidien, on se retrouve à créer un mot clé à chaque fois, et si on publie, disons, 3 dossiers par jour, on se retrouve avec 1000 mots clés au bout d’un an. Mots clés destinés à ne pas être réutilisés. Et là, c’est carrément impraticable.

    Il y aussi le problème des droits de création des mots-clés par des rédacteurs.

    Par ailleurs, pour le coup, au niveau interface, on fait du très lourd pour un usage systématiquement ponctuel (puisque le mot clé est destiné à n’avoir que 2 à 5 articles, dans la logique d’un « lire aussi... » manuel).

  • ikou
    Juin 2008

    Par ailleurs, pour les « lire aussi... », je préfère largement les croisements de mots-clés : afficher les articles qui partagent le plus de mots-clés (par exemple).

    Moi aussi c’est "un peu" l’intérêt d’un cms et du logiciel. J’ajouterais un tri par date pour un site d’actualité. Mais le problème pour le "designer spip" c’est que je suppose qu’il faut soit écrire une succession de boucles spip et on obtient une usine à gaz incompréhensible, soit simplifier avec du php et du coup l’abstraction et l’intérêt du langage spip passe à la trappe, soit un mélange des deux pour que ça reste à peu près compréhensible. J’ai l’impression que le langage spip et sa simplicité d’usage est un peu laissé de côté au profit de plug-ins pour répondre à des fonctionnalités précises. non ?

  • ARNO*
    Juin 2008

    J’ai l’impression que le langage spip et sa simplicité d’usage est un peu laissé de côté au profit de plug-ins pour répondre à des fonctionnalités précises. non ?

    Je ne crois pas. Les copains continuent à affiner les critères de boucles, il y a une foultitude de jolies choses, déjà dans la 1.9, vraiment pratiques et d’usage générique. La courbe d’apprentissage est toujours bien présente de ce côté : si tu veux améliorer tes squelettes sans PHP, il y a vraiment des choses très pratiques. Tiens, récemment je me suis mis à utiliser beaucoup plus fréquemment les critères de dates (même jour, même mois...) ; ce ne sont certainement pas les critères les plus connus, mais ils permettent des choses très pratiques là où, auparavant, on bidouillait du PHP.

    Ensuite, oui, une bonne partie de l’intérêt des plugins est bien de développer des fonctionnalités spécifiques, d’usage moins général (ou carrément ultra-spécifique) que le core. Je pense qu’on verra des plugins allant dans deux directions : des plugins à vocation très générique, et des plugins permettant de traiter des situations très spécifiques.

  • Loiseau2nuit
    Juin 2008

    Ouais ca, ça me plait ! Bravo ! :-D

    Par contre, mon site n’est pas en version dev (il est destiné à la production quand même un jour et une version dev en ce cas me plait moyennement, eut égard aux soucis que l’on peut rencontrer avec une version "non stable")

    Est-ce que ton plugin est portable facilement en version 1.9.2d ?

    Merci encore ;-)

  • Said
    Juillet 2008

    Merci infiniment pour ce plugin... Des petites choses qui nous facilitent la vie

  • Patrick Bouchaud
    Août 2008

    Enfin la solution a mon probleme, consistant a lier des articles appartenant a des rubriques gerees par des departements differents (Produits vs. Projets vs. HR...) (j’appartiens donc apparemment aux 10% des necessiteux) ! Ne [me ?] reste plus qu’a remplacer l’interface de saisie de l’article "lire aussi" par le navigateur des rubriques spip... En tous cas c’est super - merci infiniment !!

  • Said
    Août 2008

    Bonjour

    Merci pour le plugin. Je l’utilise et c’est ce qu’il fallait. Mon seul regret est que pour faire des liens entre articles, il faut ouvrir une 2è page , faire une recherche et copier - coller les articles.

    ça prend du temps alors qu’il y aurait possibilité d’accélérer la procédure.

    En tout cas, c’est juste une suggestion.

    Merci en tout cas

  • Chadweek
    Septembre 2008

    Bonjour,

    Je voulais tester le plugin. L’installation s’effectue sans soucis mais lorsque que je veux joindre un article, j’ai l’erreur suivante :

    Fatal error : Call to undefined function evaluer_fond() in /home/httpd/publication/spip-2-0/plugins/lire_aussi/exec/lire_aussi_interface.php on line 8

    J’ai la version SPIP 2.0 dev 12502. Je suis parti d’une version fraichement installée. Quelqu’un peut il m’expliquer d’où vient le problème.

    Merci par avance

  • ARNO*
    Septembre 2008

    Il y a du tangage en ce moment autour de la fonction evaluer_fond(), dont le code s’est un peu baladé dans les versions beta.

    Je viens d’essayer sur la toute dernière version (SVN 12518), et ça fonctionne.

  • Décembre 2008

    très bon plugin mais il lui manque juste la possibilité de classer les lire aussi dans un certain ordre

  • naomed
    Décembre 2008

    le plug in ne fonctionne pas avec la 1.9.2.e. Le plug va t il etre mis en conformité avec spip 2.0 ?

    ce serait vraiment super.

  • Bertrand
    Août 2009

    Bonjour, j’ai ins­tallé le plu­gin sur une ver­sion Spip 2.0.9 et si j’ai bien le champ pour ajou­ter des arti­cles, la liste des arti­cles liés ne s’affi­che pas. Par contre les relations sont bien enregistrées dans la base. Y’a-t-il une astuce pour cor­ri­ger ça ? Merci

Qui êtes-vous ?
Votre message

Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.