Vendredi 21 août 2009

Afficher l’article si la rubrique n’en a qu’un seul

Besoin récurent des squelettes SPIP : que faire des rubriques qui n’ont qu’un seul article ?

Une solution assez souvent retenue et d’afficher directement l’article s’il est tout seul dans sa rubrique :

La solution proposée ici permet de rediriger vers l’article lorsqu’on appelle explicitement la rubrique.

La redirection évite le « duplicate content » que les moteurs de recherche n’apprécient guère…

Contenu de rubrique.html

Il s’agit de renommer votre ancien rubrique.html en inc_rubrique.html et de placer dans rubrique.html le code suivant :

<BOUCLE_ArticlePlusdun(ARTICLES){id_rubrique}{1,1}>
#INCLURE{fond=inc_rubrique,id_rubrique}
</BOUCLE_ArticlePlusdun>
<BOUCLE_ArticleUnSeul(ARTICLES){id_rubrique}{0,1}>[(#HTTP_HEADER{Location: [(#URL_ARTICLE|url_absolue)]})]#HTTP_HEADER{HTTP/1.1 301 Moved Permanently}#HTTP_HEADER{Status: 301 Moved Permanently}</BOUCLE_ArticleUnSeul>
#INCLURE{fond=inc_rubrique,id_rubrique}
<//B_ArticleUnSeul>
<//B_ArticlePlusdun>

Quelques explications

  • BOUCLE_ArticlePlusdun vérifie s’il y a au moins un deuxième article dans la rubrique.
    ⇒ Si oui, alors, on affiche normalement la rubrique
  • Sinon, BOUCLE_ArticleUnSeul vérifie s’il y a bien un article
    ⇒ Si oui, alors en envois des entêtes HTTP de redirection vers l’article lui-même
    ⇒ Sinon, alors, on affiche normalement la rubrique [1]

Inconvénient de cette méthode

Le principal inconvénient, c’est que les rubriques n’ayant qu’un seul article ne seront plus du tout consultable (le contenu textuel de la rubrique).

Sur Pyrat.net avec le squelette SoyezCreateurs, la solution retenue est celle de modifier les menus de navigation de telle manière que si une rubrique ne contient qu’un seul article, alors, le lien du menu pointe sur l’article.

Par contre, les rubriques sont toujours consultables via :

  • le plan du site
  • le fil d’Ariane
  • la recherche

[13 cas où cela peut se produire :

  • la rubrique n’a que des brèves
  • la rubrique n’a que des sites référencés
  • la rubrique n’a que des sous rubriques

Vos réactions

  • Yohoo 4 janvier 2013 18:20

    Avec le plugin Spip Bonux, on peut aussi faire cela :

    <BOUCLE_rub(RUBRIQUES){id_rubrique}{tout}>
            <BOUCLE_test1(RUBRIQUES){id_parent}></BOUCLE_test1>
            <BOUCLE_test2(ARTICLES){id_rubrique}>#SET{articleseul,#ID_ARTICLE}</BOUCLE_test2>
     <BOUCLE_test(CONDITION){si #_test1:TOTAL_BOUCLE|!={0}|ou{#_test2:TOTAL_BOUCLE|>{1}}}>

    --------------------------
    MA PAGE RUBRIQUE
    --------------------------

     </BOUCLE_test>
       [(#INCLURE{fond=article,id_article=#GET{articleseul}})]
     <//B_test>
    </BOUCLE_rub>

    Avantage :

    • La fonction ne s’active pas si la rubrique contient au moins une sous-rubrique
    • Je préfère une gestion par inclusion plutôt que par direction