SPIP - Contrib

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



Accueil du site > Navigation > Liens

Redirection sur les rubriques

dimanche 21 août 2005, par Olivier GENDRIN. Dernier ajout samedi 9 décembre 2006



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

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.


Répondre à cet article

  • > Redirection sur les rubriques

    22 août 2005 01:56, par François Schreuer

    Salut Olivier,

    Idée intéressante (je me suis déjà dit plus d’une fois que ça serait utile d’avoir sur les rubriques un mécanisme similaire à ce qui existe pour les articles).

    Quelques amélioration possibles :

    Elle est conçue pour être appelée via un inclure qui remplacera tous vos #URL_RUBRIQUE dans vos squelettes.

    La méthode est intéressante et originale, mais il faudrait mieux l’expliquer, je crois. Perso, j’ai du relire trois fois le paragraphe pour capter.

    La boucle ...

    Pourquoi est-ce que tu fais pointer la redirection sur <a href="#URL_RUBRIQUE&amp;id_article=#ID_ARTICLE"> et pas simplement sur <a href="#URL_ARTICLE"> ?

    Par ailleurs, tu laisses dans ton code des bout de code non nécessaire, qui l’alourdissent et compliquent sa compréhenison : </B_verifier_si_un_seul_article_dans_rubrique> et </B_recuperer_id_article_dans_rubrique> ne servent à rien et peuvent donc être retirés.

    Il faudrait aussi préciser que c’est le titre de l’article qui s’affiche (et non le titre de la rubrique) quand un seul article est présent dans la rubrique (ça peut être surprenant) et expliquer comment afficher le titre de la rubrique avec les balises non ambigües.

    Attention ! Ça ne fonctionnera peut-être pas avec des URL réécrites (comme celles de spip-contrib par exemple).

    Pour ça, il suffit de remplacer #URL_RUBRIQUE&amp; par

    [(#URL_RUBRIQUE|strpos{?}|?{&amp;,?})]

    J’ai essayé de limiter la redirection aux seuls rubriques qui contenaient un article virtuel (avec un RegEx sur (=http://) dnas le chapeau des articles, mais je n’y suis pas parvenu. Je crois que SPIP à un gestion trop particulière des articles virtuels.

    Tu as mis quoi comme expression régulière ? Ca devrait être possible en principe.

    Cela dit, tu ne dois pas tester sur "=http://", mais seulement sur "=" (sinon, tu ne prends en compte que les redirections externes et pas les articles virtuels qui pointent vers une autre ressource du site).

    Tant que j’y suis, voici quelques liens qu’il pourrait être intéressant d’ajouter, qui traite quasiment de la même question :

    Répondre à ce message

    • > Redirection sur les rubriques 25 août 2005 00:39, par Olivier GENDRIN

      La méthode est intéressante et originale, mais il faudrait mieux l’expliquer, je crois. Perso, j’ai du relire trois fois le paragraphe pour capter.

      Ok, je vais reprendre ce passage du inclure.

      Pourquoi est-ce que tu fais pointer la redirection sur <a href="#URL_RUBRIQUE&amp;id_article=#ID_ARTICLE"> et pas simplement sur <a href="#URL_ARTICLE"> ?

      Tout simplement par soucis de cohérence. Je m’attaque à l’URL de la rubrique, je garde URL_RUBRIQUE. De toutes façons, ça ne change rien au final.

      Par ailleurs, tu laisses dans ton code des bout de code non nécessaire, qui l’alourdissent et compliquent sa compréhenison : et ne servent à rien et peuvent donc être retirés.

      Certes, du point de vue du compilateur du code, ça ne change rien, cependant, je ne supporte pas de me rendre compte à la fin de la boucle que je lisais en fait du code alternatif. Ces balises sont là pour la simplicité de lecture du code, et elle resteront quoi qu’il arrive.

      Il faudrait aussi préciser que c’est le titre de l’article qui s’affiche (et non le titre de la rubrique) quand un seul article est présent dans la rubrique (ça peut être surprenant) et expliquer comment afficher le titre de la rubrique avec les balises non ambigües.

      Oui, en même temps, je donne le lien vers la documentation qui correspond, donc finalement non...

      Pour ça, il suffit de remplacer #URL_RUBRIQUE&amp; par [(#URL_RUBRIQUE|strpos{?}|?{&amp;,?})]

      Bien vu !

      Tu as mis quoi comme expression régulière ? Ca devrait être possible en principe.

      Je ne sais plus.

      Cela dit, tu ne dois pas tester sur "=http://", mais seulement sur "=" (sinon, tu ne prends en compte que les redirections externes et pas les articles virtuels qui pointent vers une autre ressource du site).

      Oui et non, si je fais ça, j’attrape aussi les articles qui ne sont pas des redirections. Mais si je le fait sur les seulses rubriques qui n’ont qu’un article, pourquoi pas.

      Merci pour tes commentaires celà étant dit.

      Répondre à ce message

    • > Redirection sur les rubriques 6 août 2007 14:12, par Maitresinh

      Les ames secourables sont en vacances.

      bref, j’ai mis le code dans un fichier php3 et je l’appelle en inclure juste apres la balise head.

      et rien...

      Répondre à ce message

    Retour au début des forums

  • Redirection sur les rubriques

    1er juin 2006 16:53, par Jujubre

    Apres avoir passer un certain temps a fouiller forums et contrib sans etre satisfait, voici la solution que j’ai mise en oeuvre :

    Lors de la création de la rubrique, j’ai tout simplement placer mon URL dans la section "descriptif rapide".

    Ainsi, j’ecris mon lien dans ma boucle de menu : <a href="[(#DESCRIPTIF|?{#DESCRIPTIF" target="_blank,#URL_RUBRIQUE})]">

    Soit : "Si il y a un descriptif associé a cette rubrique l’afficher, si non afficher le lien vers les articles de cette rubrique.

    Facile ^^

    Jujubre

    Répondre à ce message

    • Redirection sur les rubriques 1er juin 2006 18:14, par Jujubre

      je viens de m’appercevoir que la langue fr (je bosse sur un site en) ajoute des nbsp devant le ? des url. Voici de quoi completer mon astuce precedente : A mettre dans mes_fonctions.php

      function url_no_nbsp($url) {
              return str_replace('&nbsp;?', '?', $url);
      }

      et du coup : [(#DESCRIPTIF|?[(#DESCRIPTIF|url_no_nbsp)]" target="_blank,#URL_RUBRIQUE)]p>

      Enjoy :)

      Répondre à ce message

    Retour au début des forums



Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | Charte et vie SPIP-Contrib | SPIP | L'autre.net