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

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.

<BOUCLE_Rubriques(RUBRIQUES){id_parent=0} {par num titre}><h2 title="[(#DESCRIPTIF)]">[(#TITRE|supprimer_numero)]</h2>
  <BOUCLE_SsRubriques(RUBRIQUES){id_parent} {par num titre}><li>
  <?php $ledescriptif = '[(#DESCRIPTIF|texte_script)]';
	$letitre='[(#TITRE|texte_script|supprimer_numero)]';
  ?>
  <BOUCLE_articles_plusdun(ARTICLES) {id_rubrique} {1,1}>
  <a href="[(#URL_RUBRIQUE)]" title="<? echo $ledescriptif; ?>"><? echo $letitre; ?></a>
  </BOUCLE_articles_plusdun>
	  <BOUCLE_articles_unseul(ARTICLES) {id_rubrique} {0,1}>
	  <a href="[(#URL_ARTICLE)]" title="<? echo $ledescriptif; ?>"><? echo $letitre; ?></a>
	  </BOUCLE_articles_unseul>
	  <a href="[(#URL_RUBRIQUE)]" title="<? echo $ledescriptif; ?>"><? echo $letitre; ?></a>
	  <//B_articles_unseul>
  <//B_articles_plusdun>
  </li></BOUCLE_SsRubriques>
</ul>
</BOUCLE_Rubriques>

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).

<BOUCLE_Rubriques(RUBRIQUES){id_parent=0} {par num titre}><h2 title="[(#DESCRIPTIF|supprimer_tags|attribut_html)]">[(#TITRE|supprimer_numero)]</h2>
  <BOUCLE_SsRubriques(RUBRIQUES){id_parent} {par num titre}><li>
  <BOUCLE_articles_plusdun(ARTICLES) {id_rubrique} {1,1}>
  <a href="[(#URL_RUBRIQUE)]"[ title=(#_SsRubriques:DESCRIPTIF|supprimer_tags|attribut_html)]">[(#_SsRubriques:TITRE|supprimer_numero)]</a>
  </BOUCLE_articles_plusdun>
	  <BOUCLE_articles_unseul(ARTICLES) {id_rubrique} {0,1}>
	  <a href="[(#URL_ARTICLE)]"[ title=(#_SsRubriques:DESCRIPTIF|supprimer_tags|attribut_html)]">[(#_SsRubriques:TITRE|supprimer_numero)]</a>
	  </BOUCLE_articles_unseul>
	  <a href="[(#URL_RUBRIQUE)]"[ title=(#_SsRubriques:DESCRIPTIF|supprimer_tags|attribut_html)]">[(#_SsRubriques:TITRE|supprimer_numero)]</a>
	  <//B_articles_unseul>
  <//B_articles_plusdun>
  </li></BOUCLE_SsRubriques>
</ul>
</BOUCLE_Rubriques>

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.

<B_Secteurs>
<ul>
  <BOUCLE_Secteurs(RUBRIQUES){racine}{par num titre}{doublons}>
  <li><BOUCLE_articles_plusdunSecteurs(ARTICLES) {id_rubrique} {1,1}><a href="[./(#URL_RUBRIQUE)]" title="[(#_Secteurs:DESCRIPTIF|supprimer_tags|attribut_html)]">[(#_Secteurs:TITRE|supprimer_numero)]</a></BOUCLE_articles_plusdunSecteurs><BOUCLE_articles_unseulSecteurs(ARTICLES) {id_rubrique} {0,1}><a href="[./(#URL_ARTICLE)]" title="[(#_Secteurs:DESCRIPTIF|supprimer_tags|attribut_html)]">[(#_Secteurs:TITRE|supprimer_numero)]</a></BOUCLE_articles_unseulSecteurs><a href="[./(#URL_RUBRIQUE)]" title="[(#_Secteurs:DESCRIPTIF|supprimer_tags|attribut_html)]">[(#_Secteurs:TITRE|supprimer_numero)]</a><//B_articles_unseulSecteurs>  <//B_articles_plusdunSecteurs>
<B_Rubriques>
<ul>
  <BOUCLE_Rubriques(RUBRIQUES){id_parent}{par num titre}{doublons}>
  <li><BOUCLE_articles_plusdun(ARTICLES) {id_rubrique} {1,1}><a href="[./(#URL_RUBRIQUE)]" title="[(#_Rubriques:DESCRIPTIF|supprimer_tags|attribut_html)]">[(#_Rubriques:TITRE|supprimer_numero)]</a></BOUCLE_articles_plusdun><BOUCLE_articles_unseul(ARTICLES) {id_rubrique} {0,1}><a href="[./(#URL_ARTICLE)]" title="[(#_Rubriques:DESCRIPTIF|supprimer_tags|attribut_html)]">[(#_Rubriques:TITRE|supprimer_numero)]</a></BOUCLE_articles_unseul><a href="[./(#URL_RUBRIQUE)]" title="[(#_Rubriques:DESCRIPTIF|supprimer_tags|attribut_html)]">[(#_Rubriques:TITRE|supprimer_numero)]</a><//B_articles_unseul>  <//B_articles_plusdun><BOUCLE_SsRubriques(BOUCLE_Rubriques)></BOUCLE_SsRubriques></li>
  </BOUCLE_Rubriques>
</ul>
</B_Rubriques>
   </li>
  </BOUCLE_Secteurs>
</ul>
</B_Secteurs>

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.

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_...

Discussion

22 discussions

  • 3
    Mickael B

    Bonjour
    Je vous propose une variante qui consiste à rediriger en php la rubrique vers l’article unique qu’elle contient.
    C’est le plus court et le simple qu’on puisse faire je crois.
    Il suffit de rajouter ceci dans votre squelette rubrique.html (au dessus de la balise html) :

        <BOUCLE_article_seul(ARTICLES) {id_rubrique}>
                [(#TOTAL_BOUCLE|choixsiegal{1,<?php  header('Location: #URL_ARTICLE');  ?>,""})]
        </BOUCLE_article_seul>

    C’est une variante de la boucle proposée par Creacyte qui consiste à rediriger avec la balise meta refresh qui me posait probleme car elle redirige vers la page demandée après avoir afficher la page rubrique. La méthode de redirection php me parait bcp plus transparente et rapide pour l’internaute.
    Mais n’étant pas développeur, je ne connais pas les conséquences que cela peut avoir.
    Donc si certains y voient des contre-indications, merci de me le faire savoir.

    • Ça marche ! :-)

    • janolap1

      Salut,

      J’ai étendu cette solution avec :

      <BOUCLE_article_seul(ARTICLES) {branche}>
                 [(#TOTAL_BOUCLE|choixsiegal{1,<?php  header('Location: #URL_ARTICLE');  ?>,""})]
         </BOUCLE_article_seul>

      qui possède l’avantage de prendre en compte les sous-rubriques.

    • Grand merci pour cette solution.

      Au départ je ne l’avais pas vue, j’ai donc cherché avec des doubles boucles (le souci étant de ne pas afficher directement l’article unique quand il y a des articles dans des sous-rubriques), pour définir le nombre de sous rubriques puis de n’exécuter la redirection vers l’affichage de l’article que si c’était justifié, sans jamais trouver la solution, et là, avec branche, bingo :-)

    Répondre à ce message

  • à placer dans la partie < head > < /head > du fichier rubrique.html

    <BOUCLE_article_seul(ARTICLES) {id_rubrique}>
    	[(#TOTAL_BOUCLE|choixsiegal{1,<meta http-equiv="Refresh" content="0; URL=#URL_ARTICLE">,""})]
    </BOUCLE_article_seul>

    Répondre à ce message

  • Ce lien répond également très bien à la question :
    http://forum.spip.org/fr_228197.html

    Répondre à ce message

  • 1

    Voici une version simplifiée fonctionnant sous Spip 2.1et aussi avec les squelettes Zpip . Le fichier du squelette des rubriques (rubrique.html) doit être renommé en « rubrique-standard.html ». Le code ci-dessous doit remplacer le contenu de rubrique.html.

    Pour zpip, les fichiers concernés sont dans le dossier contenu (le code ci-dessous est adapté à ce cas, sinon rectifier les lignes 9, 18 et 22 selon la topologique de votre site)

    <BOUCLE_contenu_rubrique(RUBRIQUES){id_rubrique}>
    
    [(#REM)
     a-t-on des sous-rubriques ?
     - si oui, on affiche toujours la rubrique en entier
     - si non, on teste si il y a un seul article
    ]	
    <BOUCLE_testSousRub(RUBRIQUES) {id_parent}{0,1}> </BOUCLE_testSousRub>
    [(#REM) sous-rubriques existantes]
    #INCLURE{fond=contenu/rubrique-normal,id_rubrique}
    </B_testSousRub>
    [(#REM) pas de sous-rubriques
     a t'on plus d'un article ds rubrique ?
     - si oui, on affiche la rubrique normalement
     - si non, on affiche directement l'article unique
    ]
    <BOUCLE_plusUnArtDsRub(ARTICLES){id_rubrique}{par date}{1,1}>  </BOUCLE_plusUnArtDsRub>
    [(#REM) plusieurs articles]
    #INCLURE{fond=contenu/rubrique-normal,id_rubrique}
    </B_plusUnArtDsRub>
    [(#REM) article unique]
        <BOUCLE_artSeul(ARTICLES){id_rubrique}>
               <INCLURE{fond=contenu/article}{id_article}>            
        </BOUCLE_artSeul>
    <//B_plusUnArtDsRub>
    <//B_testSousRub>
    	
    </BOUCLE_contenu_rubrique>
    • merci pour cette solution ; je n’ai pas réussi avec le menu directement (spip2.0.11) et comme j’avais déjà remplacé le contenu de rubrique.html par :

      <BOUCLE_skel(MOTS){id_rubrique}{type=XXXX}{0,1}>
         <INCLURE{fond=rubrique-#TITRE}{env}>
      </BOUCLE_skel>
         <INCLURE{fond=rubrique-normal}{env}>
      <//B_skel> 

      pour avoir un squelette diffèrent par mot clef, c’était un peu compliqué...

      En surchargeant rubrique-normal par votre code en créant une « rubrique normal2 » ça a marché......

      si ça peut servir a d’autres....

      Pour le menu j’ai bloqué au moment de la rubrique avec un seul article ; le titre affiché était celui de l’article ; pas de la rubrique....

    Répondre à ce message

  • Bonjour,

    Est ce que cela fonctionne pour les versions 2.0 de Spip ???

    Merci,

    Estelle.

    Répondre à ce message

  • Je n’arrive pas à exposer via #EXPOSE.
    Quelqu’un a t-il reussit à le faire ?

    Répondre à ce message

  • 1

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

    • On The Rock

      Je rencontre le même problème. Je n’arrive plus à EXPOSER la rubrique sélectionnée ?
      Quelqu’un a-t-il trouvé la solution ?

    Répondre à ce message

  • 3

    Bonjour,

    Je suis débutant sur Spip. J’aimerais bien essayer de modifier les boucles nécessaires si je savais où elles sont ! Savez-vous où / dans quel fichier(voir ci-dessous)se trouvent les boucles à modifier ?

    Pour info : J’utilise le squelette Erasme (téléchargé sur spip-contrib) Il y a des dizaines de fichiers dont :
    -  article.html
    -  menu.html
    -  menu2.html
    -  plan.html
    -  rubrique.plan.html
    -  rubrique.html

    Merci

    • Ben, les boucles se trouvent... Où tu veux ! Bon, on pourrait dire que ces boucles s’adaptent particulièrement bien au fichier « rubrique.html » : au lieu d’afficher un titre / descriptif de rubrique suivi d’une liste de... 1 article, on affiche directement l’article.

      Mais ces boucles peuvent d’appliquer ailleurs, ce sont des boucles (RUBRIQUES), il y en a un peu partout dans les squelettes...

    • [(#INCLURE {fond=entete})] [(#INCLURE {fond=menu}{id_rubrique}{id_rubrique})] [(#REM) -----------Découvrez également... (anciennement ici)-------------- ] [(#REM) ------------------------------------- COLONE GAUCHE ----------------------------------------- ]
      [(#REM) ---------------------- Chemin ---------------------- ]
       
      [(#REM) ---------------------- Titre ---------------------- ]
      [(#LOGO_RUBRIQUE|right||image_reduire{200,200})] [

      (#TITRE|supprimer_numero)

      ] [

      (#SOUSTITRE|majuscules)

      ] [(#TEXTE)] [
      (#TEXTE)
      ]
      [(#LOGO_RUBRIQUE|right||reduire_image{200,200})] [(#TEXTE|#TITRE|supprimer_numero)] [(#TEXTE)]
      [(#REM) ---------------------- Tests ---------------------- ] [(#INCLURE{fond=rubrique-serv}{id_rubrique})]
      [(#INCLURE{fond=rubrique-serv}{id_rubrique})]
      /B_serv0> [(#INCLURE{fond=rubrique-trombino}{id_rubrique})]
      [(#INCLURE{fond=rubrique-chrono}{id_rubrique})] [(#INCLURE{fond=rubrique-plan}{id_rubrique})] /B_plan> /B_trombino> /B_serv0> /B_serv> [(#REM) ------------------------------------- COLONE DROITE ----------------------------------------- ] [(#INCLURE {fond=bas_page})] <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
      </script>
      <script type="text/javascript">
      _uacct = "UA-3025906-5";

      urchinTracker();
      </script>
    • Apparemment je ne peux pas poster correctement le code. Je m’excuse donc pour le post inutile.
      Je suis donc perdu :-(

      Merci

    Répondre à ce message

  • 6

    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.

    • Merci, c’est génial.

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

    • 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.

    • 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

    • 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.

    • 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
      <a
      href="" > #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.

    • Grand Wazoo

      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

  • 3

    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

    • Et la même sans PHP ?

    • erational

      une n-ième variante ....
      mais sans PHP grâce à #GET / #SET

      le fichier rubrique.html sert de bifurcateur :
      -  si on a 1 article : on appelle la page article
      -  sinon on charge le squelette qui décrit la rubrique normale (à créer) rubrique_normale

      <BOUCLE_rub_principal(RUBRIQUES){id_rubrique}>
      <BOUCLE_countArt(ARTICLES){id_rubrique}> #SET{id_article,#ID_ARTICLE}</BOUCLE_countArt>#SET{total_article,#TOTAL_BOUCLE}</B_countArt>#SET{total_article,0}<//B_countArt>
      [(#GET{total_article}|=={1}|?{' ',''}) <INCLURE{fond=article}{id_article=#GET{id_article}}{lang}>]
      [(#GET{total_article}|=={1}|?{'',' '}) <INCLURE{fond=rubrique_normale}{id_rubrique}{lang}>]
      </BOUCLE_rub_principal>
      </B_rub_principal><INCLURE{fond=404}{lang}><//B_rub_principal>

      Amélioration possible :
      Tenir compter des sous-rubriques, on inclut le squelette article si la rubrique contient 0 article ET 0 sous-rubrique

    • karim belkacem

      Salut Erat :), Comme d’hab tu es le best, que dire, merci King...

    Répondre à ce message

  • 6
    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
    • PS :

      Désolé pour le message précédent, mais j’ai malheureusement oublié d’envelopper mon code de balises <HTML>, et il est donc illisible.

      Bonne journée,

      Mika

    • Salut
      Pour ma part je débute (c’est à dire que je n’y connais strictement rien en php). Je cherche depuis un moment une contrib me permettant d’afficher un article s’il est seul dans une rubrique. En fait je n’ai pas franchement eu de mal à trouver car beaucoup de personnes (que je remercie au passage) proposent des solutions. le problème, personne ne dit ou il faut insérer tout ces jolis codes !
      La votre m’a l’air toute simple à mettre en oeuvre toutefois pouvez-vous m’éclairer sur la partie suivante :

      l’appel se fait via :

      <INCLURE(page.php3){fond=redirection_1_seul_article}{id_rubrique}>

      Ou dois-je inclure ce code ? J’imagine dans le fichier rubrique.html mais ou exactement ?
      Par ailleurs je précise que j’utilise un squelette beespip.
      Merci pour votre aide

    • Bonjour à tous,
      La question est peut être stupide mais est-il possible de faire la même chose avec Spip 1.9 ?
      je suppose que oui...
      Si quelqu’un peut me suggérer une piste de recherche, ça serait sympa car je suis coincé à présent.
      Merci d’avance pour toute aide ou suggestion,
      bien cordialement,

    • Oui.

      Voir squelette soyezcreateur sur la zone.

    • merci beaucoup

    • Christian alias le Jon

      Bonjour,
      Je viens de terminer mon site en local et tout est impeccable, sauf que... je voudrais un affichage direct de l’article si la rubrique n’en a qu’un.
      Je suis en spip 1.9.2, et je dois vous avouer que je ne m’en sors pas avec les informations laconiques données par Jacques PYRAT (« Voir squelette soyezcreateur sur la zone »).
      S’il se trouve un bon samaritain pour fournir quelques renseignements complémentaires, je suis preneur. En vous remerciant d’avance.

    Répondre à ce message

  • 4

    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>
    • Merci pour ce tip bien pratique et bien moins lourd en ressources/requetes.

    • 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

    • 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

    • 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

  • 2

    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

    • Je n’utilise jamais cette notation. De mémoire, elle est sensée faire un lien sur le logo ?

      Si oui, alors tu peux faire :

      <a href="#URL_RUBRIQUE"><img src="#LOGO_RUBRIQUE_NORMAL" alt="" /></a>

      Et si ça ne marche pas, c’est peut être qu’il faut explicitement référencer la boucle de la rubrique pour le logo.

    • Cette notation est la plus simple pour tout ce qu’il y a à appliquer sur un logo.

      Et reprendre la notation de base n’est pas vraiment intéressant, et carrément impossible si on veut utiliser les filtres sur les images.

    Répondre à ce message

  • 1

    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.

    • 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

  • 1

    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

    • mathsol

      Bonjour, votre contrib proposant d’afficher un article précis parmis d’autres m’interresse beaucoup mais où puis je la trouver ?
      merci d’avance

    Répondre à ce message

  • 1

    salut

    bicarfoule : petites erreurs de frappe dans le 2e 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 ?

    • ahem.
      correctif au correctif.

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

      Devient :

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

      sorry

    Répondre à ce message

  • 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

  • Bonjour,

    Votre super programme est proposé par Sylvain sur son site de gestion du squelette Sarka-spip, squelette que j’utilise pour le site internet de mon association.

    Je ne sais pas programmer et prend donc uniquement des éléments « standards », sans rien modifier (j’ai pris votre programme ainsi qu’un programme permettant d’afficher le menu différemment).

    Or apparemment les forums (réponses aux articles réalisées par les internautes) ne s’affichent plus sur des articles solitaires. Je peux bien accéder à la réponse à partir de l’hyperlien mis à disposition dans le mail qui m’est envoyé automatiquement par le système lorsque quelqu’un répond à un article. Mais cette réponse n’apparaît pas quand on accède au site de manière normale, par le menu.

    Sauriez-vous pourquoi, quelqu’un a-t-il déjà rencontré ce problème ?

    Merci de votre aide.

    Corinne

    Répondre à ce message

  • 4
    stéphane

    J’aimerai bien intégrer cette astuce sympathique avec le menu déroulant et contextuel de Nicolas (voir ici)...

    Est-ce possible ? et si oui comment ?

    merci.

    • spip sicg

      nous nous intéressons aussi à ce problème et nous souhaiterions également obtenir des informations à ce sujet (intégration de cette boucle dans le menu déroulant de NICO)
      merci de bien vouloir répondre à cette question, ça serait sympa.

    • voici le code modifier pour le menu de NICO, il faut recherche le premier #URL_RUBRIQUE dans menu.html, supprimer la ligne et la remplace par le code suivant :

      <BOUCLE_articles_plusdun(ARTICLES) {id_rubrique} {1,1}>
      <a href="#URL_RUBRIQUE" class="secteur<?php echo (#ID_RUBRIQUE == $actuelle ? '' : (in_array(#ID_RUBRIQUE, $hierarchie) ? 'on' : 'off')); ?>" >[(#TITRE|supprimer_numero)]</a>
      </BOUCLE_articles_plusdun>
      
      <BOUCLE_articles_unseul(ARTICLES) {id_rubrique} {0,1}>
      <a href="#URL_ARTICLE" class="secteur<?php echo (#ID_RUBRIQUE == $actuelle ? '' : (in_array(#ID_RUBRIQUE, $hierarchie) ? 'on' : 'off')); ?>" >[(#TITRE|supprimer_numero)]</a>
      </BOUCLE_articles_unseul>
      
      <a href="#URL_RUBRIQUE" class="secteur<?php echo (#ID_RUBRIQUE == $actuelle ? '' : (in_array(#ID_RUBRIQUE, $hierarchie) ? 'on' : 'off')); ?>" >[(#TITRE|supprimer_numero)]</a>
      <//B_articles_unseul>
      <//B_articles_plusdun>

      puis rechercher le second #URL_RUBRIQUE, supprimer la ligne et la remplace par le code suivant :

      <BOUCLE_articles_unseul_sr(ARTICLES) {id_rubrique} {0,1}>
      <a href="#URL_ARTICLE" class="rubrique<?php echo (#ID_RUBRIQUE == $actuelle ? '' : (in_array(#ID_RUBRIQUE, $hierarchie) ? 'on' : 'off')); ?>" >[(#TITRE|supprimer_numero)]</a>
      </BOUCLE_articles_unseul_sr>
      
      <a href="#URL_RUBRIQUE" class="rubrique<?php echo (#ID_RUBRIQUE == $actuelle ? '' : (in_array(#ID_RUBRIQUE, $hierarchie) ? 'on' : 'off')); ?>" >[(#TITRE|supprimer_numero)]</a>
      <//B_articles_unseul_sr>
    • Stéphane

      merci Seb

    • damien lecouturier

      Un immense merci pour cette contrib absolument fabuleuse !

    Répondre à ce message

  • 1

    Peux-tu me dire ou je dois mettre la boucle decrite ?
    Merci

    • Personnelement, j’ai mis cette boucle dans un menu (en l’occurence à gauche dans la page).

      Sur le site, il y a en plus un javascript pour avoir un effet de menu déroulant (voir site)

    Répondre à ce message

  • Bonjour

    Votre site (mission isolement) est joli, mais surement sur PC, il ne l’ait pas sur Mac OS X, avec Explorer, ni sur Safari, c’est dommage...

    Répondre à ce message

  • 1

    bonjour,
    je comprend très bien le système des boucles,
    mais est-il nécessaire de remplacer les variables de spip en variables php ?
    ou est-ce simplement pour une meilleur lisibilité de code ?
    merci !

    • Dans tous les cas, il s’agit d’afficher le titre et descriptif de la rubrique.
      Or, ceux-ci ne sont plus disponibles lorsque l’on est rentré dans la boucle BOUCLE_articles_plusdun.
      D’où le stockage dans une variable php !

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

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.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom