SPIP - Contrib

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



Accueil du site > Navigation > Menus contextuels

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

dimanche 14 septembre 2003, par RealET. Dernier ajout lundi 11 décembre 2006


Dans un menu de navigation, quand une rubrique n’a qu’un article, aller directement l’afficher plutôt que de passer par la page rubrique avec un seul article listé.


Pour SPIP 1.6 ou 1.7

Je me suis donc mis à développer un site avec des rubriques qui pour l’instant n’ont qu’un seul article (voire même pas d’article, mais seulement des liens).

J’ai donc utilisé le code suivant pour faire mes liens.

Quelques remarques pour comprendre ces boucles :

  • les rubriques principales n’ont pas d’articles, seules les sous-rubriques en ont (et il n’y a que 2 niveaux de rubriques)
  • Il y a 3 cas à gérer :
    1. Il y a au moins 2 articles : renvois sur la rubrique
    2. Il n’y a qu’un article : renvois sur l’article
    3. Il n’y a pas d’article (ça peut se produire : quand il n’y a que des liens ou que des brèves) : renvois sur la rubrique
  • Dans tous les cas, on a stocké avant de faire les sous-boucles le titre et descriptif de la rubrique concernée pour pouvoir les mettres dans le lien.

Mise à jour pour la 1.8

La version 1.8 de SPIP introduit la notion de Balises non ambiguës. Ceci permet de réécrire cette contrib sans utiliser de php (qui ne servait après tout qu’à récupérer le #TITRE et le #DESCRIPTIF de la rubrique alors qu’on était déjà dans un boucle ARTICLES).

Version universelle : illimitée et récursive

Et voici, toujours pour la version 1.8.x de SPIP ce qu’il faut écrire pour avoir une liste à puce plus ou moins indentée reprenant la structure hiérarchique des rubriques du site, quelle que soit la profondeur de cette hiérarchie.

Notez l’usage d’un appel de boucle récursif :

<BOUCLE_SsRubriques(BOUCLE_Rubriques)></BOUCLE_SsRubriques>

Cet appel permet de descendre dans la hiérarchie tant qu’il faut pour parcourir l’ensemble des sous-niveaux.

P.-S.

note admins spip-contrib : si utile pour comprendre, la même fonctionnaité expliqué (un peu) différemment sur http://www.3studio.org/blog.php?id_...


Répondre à cet article

  • Pas de problème, sauf pour utiliser #EXPOSE. Pour le moment, je ne trouve pas de solution.

    Répondre à ce message

    Retour au début des forums

  • Le squelettre de spip-contrib utilise une noisette qui doit être un produit de cet article non ?

    J’ai eu l’occasion de recommander son emploi sur spip-user, aussi je propose d’ajouter à cette contrib un 4e sous- titre intitulé "Utilisation des boucles dans une noisette" Avec un texte du genre : On peut également utiliser ces boucles en inclure dans un menu, dans un fil d’ariane ou dans l’affichage de sous-rubriques dans un squelette.

    Pour cela, il suffit de créer une noisette (un fichier à inclure dans un squelette) (=>mettre le fichier inc-triurlrubrique.html de spip-contrib).

    On remplace la balise URL_RUBRIQUE par l’inclusion de la noisette : à la place de <a href="#URL_RUBRIQUE" > #TITRE</a> on met

    <a
    href="<INCLURE{fond=inc-triurlrubrique}{id_rubrique}>" > #TITRE</a>

    Avantage : il n’y a aucune autre modification à apporter aux squelettes pour obtenir l’affichage de l’article d’une rubrique à article unique.

    Répondre à ce message

    • Merci, c’est génial.

      Très bonne idée de rajouter un sous-titre "Utilisation dans une noisette"

      Répondre à ce message

    • Afficher directement l’article si la rubrique n’en a qu’un 1er novembre 2007 09:53, par Grand Wazoo

      Hello les spipeur(euse)s,

      J’ai essayé la noisette de Stanislas est c’est une pure merveille de facilité. Pour un petit site qui n’a pas trop d’articles dans ses rubriques, je dirais même que c’est indispensable question navigation.

      Un grand merci pour cette contrib, de la part d’un spipeur même pas capable de développer, juste d’utiliser.

      Répondre à ce message

    • Bonjour,

      Pourriez-vous me donner plus d’explications s’il vous plaît.

      j’ai telechargé "inc-triurlrubrique.html" je l’ai mis dans mon dossier squelettes, ensuite vous dites


      remplacer la balise URL_RUBRIQUE par l’inclusion de la noisette : à la place de URL_RUBRIQUE


      c’est à modifier dans le fichier rubrique.html dans mon dossier squelettes ? c’est bien ça ?

      merci d’avance

      Répondre à ce message

      • Hello pmd,

        Non, pas tout à fait. Tu dois remplacer ce fameux

        <a href="#URL_RUBRIQUE" > #TITRE</a>

        par

        <a href="<INCLURE{fond=inc-triurlrubrique}{id_rubrique}>" > #TITRE</a>

        quelque part où tu cherches les rubiques par une boucle pour les afficher dans un menu par exemple.

        Je pense que c’est dans le squelette qui affiche le menu que tu devrais modifier le code.

        Répondre à ce message

        • Bonjour,

          Je suis débutante en spip et j’utilise spip 1.9.2. Je cherche en vain comment afficher directement 1 article si la rubrique ou sous-rubrique n’en a qu’un. j’ai essayé comme indiqué de remplacer dans le fichier inc-menu #TITRE par #TITRE J’ai tenté également : . Mais dans les 2 cas, ca bug et ca donne n’importe quoi sur le site.

          Est-ce que les fichiers inc-triurlrubrique.html et redirection_1_seul_article.html sont bien adaptées à cette version de SPIP ?? Si qqun a des idées, je serai très reconnaissante, car je rame complètement ! Merci beaucoup.

          Répondre à ce message

          • Hello Marie,

            Premièrement, laisse tomber le "redirection_1_seul_article.html.

            Maintenant, tu copies le fichier inc-triurlrubrique.html dans le répertoire de ton squelette (où ya tous les fichiers propre à ton site).

            Ensuite, tu repères, toujours dans le répertoire squelette de ton site, le fichier qui affiche les rubriques. En général, c’est le fichier qui crée le menu. Tu fais une copie de sauvegarde de ce fichier et tu commences :

            Dans ce fichier, tu cherches la boucle qui affiche les rubriques. Chez moi, par ex. c’est :

            [(#REM) Toutes les rubriques du site sauf Agenda ]
             <BOUCLE_secteurs(RUBRIQUES) {racine} {titre!=Agenda}{par titre}>
                    <li<BOUCLE_smenr(RUBRIQUES){id_parent}{0,1}> class="smenu"</BOUCLE_smenr>><a href="<INCLURE {fond=inc-triurlrubrique} {id_rubrique}>" > [(#TITRE|supprimer_numero)]</a>
                     <B_rubriques>
                            <ul>
                     <BOUCLE_rubriques(RUBRIQUES) {id_parent} {par titre}>
                            <li<BOUCLE_smen(RUBRIQUES){id_parent}{0,1}> class="smenu"</BOUCLE_smen>><a href="<INCLURE {fond=inc-triurlrubrique} {id_rubrique}>" > [(#TITRE|supprimer_numero)]</a>
                             <BOUCLE_sous_rubriques(BOUCLE_rubriques)> </BOUCLE_sous_rubriques></li><//B_sous_rubriques>
                     </BOUCLE_rubriques>
                            </ul>
                      </B_rubriques>
                    </li>
             </BOUCLE_secteurs>

            Si tu ne trouves pas, fait une recherche sur "BOUCLE_secteurs(RUBRIQUES)" dans le répertoire de ton squelette (avec Dreamweaver, c’est un jeu d’enfant ;-)

            Ensuite, tu inclus fond=inc-triurlrubrique comme ci-dessus dans la balise "a href"

            N’oublie pas d’enregistrer puis d’envoyer ton fichier modifié et le fichier inc-triurlrubrique.html chez ton hébergeur chéri et voilà, le tour est joué.

            Mêêêême moi j’y suis arrivé alors persévère encore juste un peu et tu verras le firmament ;-)) Grand Wazoo

            Répondre à ce message

    Retour au début des forums

  • Bonjour ! J'ai créé une petite variante à cette contrib : elle redirige sur les articles et les rubriques également. Il faut créer un fichier nommé redirection_1_seul_article.html dans le répertoire squelettes de votre site Contenu du fichier redirection_1_seul_article.html <B_nb_article><BOUCLE_nb_article(ARTICLES)\{id_rubrique}><?php $urlArticle="#URL_ARTICLE"; $totalArticles = '#TOTAL_BOUCLE' ?></BOUCLE_nb_article></B_nb_article> <B_nb_rubriques><BOUCLE_nb_rubriques(RUBRIQUES)\{id_parent}\{tout}><?php $urlRubrique="#URL_RUBRIQUE"; $totalRubriques = '#TOTAL_BOUCLE'; ?></BOUCLE_nb_rubriques></B_nb_rubriques> <B_texte_rubriqueEnCours><BOUCLE_texte_rubriqueEnCours(RUBRIQUES)\{id_rubrique}><?php $texteRubEnCours = '#TEXTE'; ?></BOUCLE_texte_rubriqueEnCours></B_rubriqueEnCours> <?php if ($totalRubriques == 0 && $totalArticles == 1 && $texteRubEnCours == '') \{ header("location:$urlArticle"); } ?> <?php if ($totalRubriques == 1 && $totalArticles == 0 && $texteRubEnCours == '') \{ header("location:$urlRubrique"); } ?> L'appel se fait {via} : Principe : - on teste s'il existe d'autres sous rubriques dans la rubrique courante - on teste s'il existe d'autres articles dans la rubrique courante - on teste si la rubrique courante possède une description S'il n'y a aucune sous-rubrique, 1 seul article et que le texte de la rubrique courante est vite, alors on redirige sur l'article unique de la rubrique courante. S'il n'y a aucun article, 1 seule sous-rubrique et que le texte de la rubrique courante est vide, alors on redirige vers la sous-rubrique unique de la rubrique courante. Appel : Quel est l'intérêt ? Si vous avez, pour des raisons de catégorisation, des rubriques ne contenant qu'une seule sous-rubrique ou qu'un seul article, l'utilisateur n'aura pas à "gaspiller" des clicks pour atteindre le 763ème niveau de l'arborescence. Et voilà, merci de votre attention ! Mika

    Répondre à ce message

    Retour au début des forums

  • Bonjour !

    J'ai créé une petite variante à cette contrib : elle redirige sur les articles et les rubriques également.

    Il faut créer un fichier nommé redirection_1_seul_article.html dans le répertoire squelettes de votre site

    Contenu du fichier redirection_1_seul_article.html :



    L'appel se fait via :



    Principe : - on teste s'il existe d'autres sous rubriques dans la rubrique courante - on teste s'il existe d'autres articles dans la rubrique courante - on teste si la rubrique courante possède une description

    S'il n'y a aucune sous-rubrique, 1 seul article et que le texte de la rubrique courante est vite, alors on redirige sur l'article unique de la rubrique courante.

    S'il n'y a aucun article, 1 seule sous-rubrique et que le texte de la rubrique courante est vide, alors on redirige vers la sous-rubrique unique de la rubrique courante.

    Quel est l'intérêt ?

    Si vous avez, pour des raisons de catégorisation, des rubriques ne contenant qu'une seule sous-rubrique ou qu'un seul article, l'utilisateur n'aura pas à "gaspiller" des clicks pour atteindre le 763ème niveau de l'arborescence.

    Et voilà, merci de votre attention !

    Mika

    Répondre à ce message

    Retour au début des forums

  • utiliser une simple redirection PHP ?

    12 novembre 2005 14:09, par erational

    Une autre solution peut être moins élégante mais très économique : si la rubrique contient un seul article, on redige directement sur l’article (cela permet d’éviter de surcharger le squelette rubrique).

    Attention comme on utilise header("location :") ne laisser aucun espace blanc avant l’inclusion de ce code

    <BOUCLE_rubrique_principale(RUBRIQUES) {id_rubrique}><BOUCLE_nb_article(ARTICLES){id_rubrique}><?php $k="#URL_ARTICLE"; ?></BOUCLE_nb_article><?php if ('#TOTAL_BOUCLE'==1) header("location:$k");?></B_nb_article>
    .... votre squelette rubrique ici...
    </BOUCLE_rubrique_principale>

    Répondre à ce message

    • utiliser une simple redirection PHP ? 12 décembre 2005 11:57, par julespige

      Merci pour ce tip bien pratique et bien moins lourd en ressources/requetes.

      Répondre à ce message

    • utiliser une simple redirection PHP ? 22 janvier 2006 15:12, par Antoine

      J’ai essayé d’utiliser votre boucle comme ceci (elle englobe tout le code de ma page rubrique.html) : <code> <BOUCLE_rubrique_principale(RUBRIQUES) id_rubrique><BOUCLE_1_article(ARTICLES)id_rubrique> < ?php $k=”#URL-ARTICLE” ; ?></BOUCLE_1_article>< ?php if (’#TOTAL_BOUCLE’==1) header("location :$k") ; ?></B_1_article>

      Code de ma page rubrique.html

      </BOUCLE_rubrique_principale> </code> Mais je n’obtiens l’ouverture de mon article unique directement dans la page article ? Pouvez-vous m’expliquez pourquoi

      Répondre à ce message

      • utiliser une simple redirection PHP ? 8 mars 2007 19:29, par cyrillle

        je ne sais pas si tu as trouvé depuis le temps ? sinon tite astuce : tu repers ta boucle de début (quand dans ton code tu vois apparaître boucle) la tu copies juste au dessus le début puis ensuite tu reperds ou c’est marqué la dernière boucle dans ton code html et juste après tu copies la fin (ce qui y a après le squellette).

        voila j’espère avoir été assez clair sinon cyrillle@hotmail.com

        salut salut

        dèz pour les fautes

        Répondre à ce message

    • utiliser une simple redirection PHP ? 26 octobre 2007 10:55, par eldé

      bonjour,

      Un grand merci pour ce code, Cela fonctionne impeccable. Un seul petit probléme : je perds l’affichage des bréves dans les rubriques. Aurais-tu une solution ?

      ( le site Spip http://clichy.lasourisverte.net/ sera en ligne la semaine prochaine )

      eldé

      Répondre à ce message

    Retour au début des forums

  • #LOGO_RUBRIQUE_NORMAL||#URL_RUBRIQUE ne marche pas

    6 octobre 2007 23:18, par Perline

    C’est super nickel et bien pratique pour économiser des clics inutiles !
    Pour moi, le remplacement ne fonctionne pas pour le #URL_RUBRIQUE, filtre d’un logo.
    Une solution ? Merci

    Répondre à ce message

    Retour au début des forums

  • Bravo pour cette boucle.

    Je l’utilise de maniére détournée pour m’affranchir des pages rubriques qui dans l’organisation de mon site ne m’intéresse pas.

    je n’utilise en gros que la boucle articles_unseul. Le problème est que pour une seule rubrique (en fait pour la rubrique qui me servira de blog) je voudrais tout de même tomber sur la page rubrique.

    Je ne sais pas comment faire.

    Je pense qu’il faut que j’exclu d’abord cette rubrique de la boucle article_un seul pour la faire prendre en compte (et exclusivement elle) par une boucle qui m’enverrai vers la page de rubrique. Je ne sais pas comment faire cela (notamment si on peut exclure des éléments de la boucle. Une suggestion, idée, lien ??

    Merci d’avance.

    Répondre à ce message

    • j’ai trouver un solution avec la synthaxe suivante

      <BOUCLE_articles_unseul(ARTICLES) {id_rubrique} {id_rubrique != 2} {par date}{inverse}{0,1}>

      Ca me permet d’exclure la rubrique 2 du résultat. Pour la réintégrerensuite avec lien vers la page rubrique j’ai écrit le lien en dur en dehors de la boucle.

      Tout ça ne doit pas être trés propre mais ca marche, si vous avez une meilleure manière, je suis intéressé.

      Répondre à ce message

    Retour au début des forums

  • j’ai crée une variante de cette contrib, elle permet de choisir concrétement un article par défaut dans l’arborescence de la rubrique dans laquelle on est.

    c’est assez long a explique donc si vous voulez choisir votre article, quand vous en avez plusieurs dans la rubrique et pas “simplement” mettre l’article quand il est seul... alors rendez vous http://www.spip-contrib.net/Rubriques-remplacees-par-les bon la contrib n’est pas encore validée mais si vous avez un compte spip-contrib c’est l’article 2100 :) http://www.spip-contrib.net/ecrire/ ?exec=articles&id_article=2100

    Répondre à ce message

    Retour au début des forums

  • salut

    bicarfoule : petites erreurs de frappe dans le 2ème pavé (“Mise à jour pour la 1.8”, crochets et quotes des “titles”) :

    <a href="[(#URL_ARTICLE)]"
    [title=(#_SsRubriques:DESCRIPTIF|supprimer_tags|attribut_html)]">

    devient :

    <a href="[(#URL_ARTICLE)]"  title="[(#_SsRubriques:DESCRIPTIF|supprimer_tags|attribut_html)]">

    hmm ?

    Répondre à ce message

    Retour au début des forums

  • Plusieurs articles , mais un seul a afficher

    2 janvier 2007 08:42, par agnes007

    Bonjour Mon squelette utilise ce code pour ne pas afficher directement les articles dnas les rubriques qui n’en proposent q’un. Mais nous utilisons aussi des mots clés pour exclure des articles de l’affichage (par exemple, des vignettes, etc). Les articles munis de ces mots clés sont appelés puis exclus grace au parametre "doublons" Malheureusement, le systeme de comptage des articles ("plus d un article") ne permet pas d exclure ces articles. J’ai donc des rubriques a plusieurs articels... mais un seul affiche. je n’arrive pas a modifier le code pour gérer cela. Any help ? merci a tous Agnes

    Répondre à ce message

    Retour au début des forums

0 | 25



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