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

Aucune discussion

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