Journal Web de Thierry Bothorel, INFORMATIQUE et WARGAMES
Accueil du site > INFORMATIQUE > Systèmes de publication web > SPIP > TrackBacks sous SPIP

TrackBacks sous SPIP

lundi 12 septembre 2005

SPIP offre la syndication en standard, mais ne supporte pas les TrackBacks (RétroLiens en français).


Menu

Introduction

Bon je l’avoue, jusqu’à il y a une semaine, je ne savais pas “exactement” ce qu’était un TrackBack, où RétroLien [1]. Je suis passé “au travers” du phénomène Blog, sans trop chercher à comprendre ce que c’était et son fonctionnement. Je voyais bien sur des sites en bas des messages des liens "Lien permanent", "Permalink", "TrackBack" ou "RétroLien", mais sans vraiment à chercher à comprendre à quoi çà servait.

Ayant basculé récemment mon site personnel sur SPIP, je parcours souvent les sites qui lui sont dédiés, et je ne sais plus quelle lecture d’un article m’a déclenché un élan de curiosité ! Je n’avais pas spécialement envie d’en mettre sur mon site personnel, çà ne changera pas grand chose, mais tant qu’à apprendre leur fonctionnement, autant les utiliser !

Après mes recherches je me suis concentré sur deux pages :

- L’article « Trackback avec SPIP » par Minh Quang, 14 mars 2004 du site Yvo*NET

- L’article de « Trackbacks pour SPIP » par James du 30 mai 2005 du site Spip.Blog et ses explications sur SPIP-Contrib.

La 1ère méthode de Minh Quang fait appel à un script externe cgi en Perl qu’il faut intégrer dans SPIP. La deuxième méthode de James est une intégration native à SPIP. "Native" n’est pas exactement le terme approprié, puisque ce n’est pas géré par défaut par SPIP. C’est simplement une “ré-écriture” en PHP adaptée et ajoutée à SPIP.

A titre personnel, la deuxième solution de James me séduit moins. Non pas qu’il y ai un problème particulier, mais je me rallie à la volonté émise par Minh Quang dans son article de toucher le moins possible au code de SPIP. J’ai déjà été "échaudé" par ce type de modifications sur le CMS Mambo, c’est pourquoi je privilégie autant que possible une solution qui ne modifie pas le code natif, ou le moins possible, rendant les mises à jour beaucoup plus simples. A ce titre, la solution de Minh Quang ne nécessite qu’une modification du squelette. Je ne vais pas expliquer la provenance du script, lisez cet article du site Cendres.net pour une explication en français, ou directement sur le site de MovableType à l’origine de TrackBack.

Allons-y pour cette solution. Je ne vais pas détailler toute les étapes, pour cela suivez l’article sur Yvo*NET, je vais simplement décrire les changements que j’y ai apporté [2] en fonction de mes besoins :

- Gestion de deux langues (il faut que #MENU_LANG soit utilisé)
- Utilisation du répertoire cgi-bin pour les scripts cgi (il faut donc pouvoir éxécuter ses propres scripts en Perl).
- Affichage des RétroLiens faits par d’autres Blogs à la suite de l’article, et non dans une fenêtre popup, reprenant ici l’implémentation de James.


Retour au Menu"

Etape 1 : Modification du script tb.cgi pour l’adapter à mes besoins.

Mon site personnel étant bilingue, j’ai du modifier le script pour que l’affichage du texte soit dans la langue sélectionnée. Attention je n’y connais rien en Perl, les "if ...else" que j’ai utilisés ne sont peut-être pas ce qu’il y a de mieux, mais enfin çà marche.

- Faites les modifications indiquée sur le site Yvo*NET pour le fichier tb.cgi , en incluant l’étape ’facultative’ pour le formulaire administrateur.

- Ligne 10, remplacez :


my $Footer = "./footer.txt";

par :

(On va créer ce fichier après).

- Après le bloc de variables ajouté par Minh Quang, finissant par my $url = param('url');, ajoutez :

On ajoutera ce paramètre dans le squelette après.

- Ligne 39 et 40, remplacez :


   print header(), from_file($Header), <<URL;
<div class="url">TrackBack URL for this entry:

par :

- Ligne 45, insérez :

- Remplacez la ligne 49 :


<div class="footer">Tracked: %s %s</div>

par :

- Ligne 54 insérez :

- Remplacez la ligne 55 :


       my $ts = POSIX::strftime("%B %d, %Y %I:%M %p",

par :

- Ligne 65 insérez :

- Remplacez la ligne 67 :


<div align="right">[Is this your site? <a href="$me?__mode=login">Log in</a> to delete pings.]</div>

par :

- Ligne 217 insérez les lignes :

- Remplacez les lignes 221 et 222 :


Password: <input name="key" type="password" />
<input type="submit" value="Log in" />

par :

Voilà c’en est fini avec les modifications du fichier tb.cgi. Les apports ne concernent donc que le multilinguisme. Si vous n’êtes pas sûr des modifications à apporter, vous pouvez télécharger le fichier tb.cgi modifié en bas de page.


Retour au Menu"

Etape 2 : Création du fichier footer_fr.txt

Faite une copie du fichier footer.txt en le renommant footer_fr.txt et remplacez le contenu par :


Retour au Menu"

Etape 3 : Envoi des fichiers chez l’hébergeur

Suivez les indications du site Yvo*NET, à ces différences près :

- Il faut envoyer en plus le fichier footer_fr.txt.

- Je préfère mettre les scripts cgi dans le répertoire qui leur sont destinés, cgi-bin [3]. Les explications qui suivent correspondront donc à cette situation.


Retour au Menu"

Etape 4 : Modification du squelette

En ce qui me concerne, je n’ajoute les RétroLiens que sur la page individuelle de chaque article, pas dans les brèves ni le sommaire. Je ne modifie que le fichier article.html du squelette.

- Ajout du compteur de trackbacks

Suivez les indications du paragraphe 3 d’Yvo*NET, mais j’ai du modifier le code d’abord pour le chemin :


if (file_exists("./trackback/tb_rss/".$filetrack.".xml")) {
       $fichier = "./trackback/tb_rss/".$filetrack.".xml";

est remplacé par :

Ensuite j’ai constaté qu’il y a un bug quand on se loggue pour supprimer les RétroLiens. Si on supprime les RétroLiens, ceux-ci sont effectivement supprimés à l’affichage mais le compteur du nombre de RétroLiens n’est pas mis à jour. En fait il ne diminue jamais, sauf si on ajoute un nouveau RétroLien. Cela est du à un bug de tb.cgi qui ne met pas à jour les fichiers XML de /cgi-bin/tb_rss/ lors des supressions. Il faut attendre qu’un nouveau RétroLien soit ajouté pour que le compteur soit à nouveau correct.
Voici comment corriger ce problème en éditant le fichier tb.cgi. Dans le bloc elsif ($mode eq 'delete'), après la ligne 82 du fichier original, ajoutez ces lignes :

- Lien vers les informations de TrackBack dans une boucle ARTICLE, Bouton vers le formulaire de ping.

Pour cette étape nous allons simplement nous inspirez du code du paragraphe 4 et 6 d’Yvo*NET, car nous voulons afficher les RétroLiens sur nos articles DANS LE CORPS de la page, et non par un lien ouvrant une fenêtre pop-up, reprenant la présentation de l’implémentation de l’article de Spip.Blog. Pour ce faire je vais utiliser une IFRAME :

Dans votre squelette, vous avez sûrement en dessous de votre article le lien "Répondre à ce message". Nous allons prendre comme base le code utilisé dans le squelette par défaut de SPIP 1.8.2 que j’utilise sur mon site (pfff, quel faignant !) :

- Remplacez la ligne :


[<div class="forum-repondre"><b><a  href="forum.php3?(#PARAMETRES_FORUM)"><:repondre_article:></a></b></div>]
<br />

par :