Problèmatique
SPIP propose une redirection automatique pour certains articles (appelés articles virtuels). Cette redirection est placée dans le champ chapo de la base de données, et fonctionne dès que l’URL contient id_article=numéro de l’article virtuel.
Dans certains cas, il peut être intéréssant de déporter cette redirection automatique sur les rubriques. La boucle qui suit va permettre de le faire. Elle est conçue pour être appelée via un inclure qui remplacera tous vos #URL_RUBRIQUE
dans vos squelettes. L’inclure prends en paramètre {id_rubrique}
, ce qui donne par exemple <INCLURE (redirection.php3) {id_rubrique}>
J’ai considéré dans ce qui suit qu’une rubrique redirigée ne contient qu’un seul article.
Attention ! Ça ne fonctionnera peut-être pas avec des URL réécrites (comme celles de spip-contrib par exemple). Voir à ce sujet le commentaire de François Schreuer plus bas.
La boucle
<BOUCLE_principale (RUBRIQUES) {id_rubrique} {tout}>
<BOUCLE_verifier_si_un_seul_article_dans_rubrique (ARTICLES) {id_rubrique} {1,1}>
<a href="#URL_RUBRIQUE">[(#TITRE|supprimer_numero)]</a>
</BOUCLE_verifier_si_un_seul_article_dans_rubrique>
</B_verifier_si_un_seul_article_dans_rubrique>
<BOUCLE_recuperer_id_article_dans_rubrique (ARTICLES) {id_rubrique}>
<a href="#URL_RUBRIQUE&id_article=#ID_ARTICLE">[(#TITRE|supprimer_numero)]</a>
</BOUCLE_recuperer_id_article_dans_rubrique>
</B_recuperer_id_article_dans_rubrique>
<a href="#URL_RUBRIQUE">[(#TITRE|supprimer_numero)]</a>
<//B_recuperer_id_article_dans_rubrique>
<//B_verifier_si_un_seul_article_dans_rubrique>
</BOUCLE_principale>
Fonctionnement
Il y a trois cas à considérer : soit la rubrique contient plusieurs articles (pas de ridirection sur la rubrique), soit elle n’en contient qu’un seul (qui pourrait être un article de redirection), soit elle n’en contient pas.
La boucle _verifier_si_un_seul_article_dans_rubrique cherche le second article de la rubrique. Si elle le trouve, la rubrique contient plus de un article. Si non, la rubrique en contient au plus un.
La boucle _recuperer_id_article_rubrique essaie de récupérer l’id_article du seul article de la rubrique, et l’ajoute à l’URL. Si elle n’y parviens pas, il n’y a pas d’articles dans la rubriques. L’URL de la rubrique est affiché quand même.
Remarques
J’ai essayé de limiter la redirection aux seuls rubriques qui contenaient un article virtuel (avec un RegEx sur (=http://) dans le chapeau des articles, mais je n’y suis pas parvenu. Je crois que SPIP à une gestion trop particulière des articles virtuels.
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |