La page des rubriques

Commençons avec un fichier « rubrique.html » vierge.

La première version de notre fichier sera très simple. Nous intégrons tout de suite la BOUCLE_hierarchie, qui ne présente ici aucune particularité.

<html>
<title>[#NOM_SITE_SPIP]
<BOUCLE_titre(RUBRIQUES){id_rubrique}>#TITRE</BOUCLE_titre></title>
</head>

<body>
<blockquote>
     <BOUCLE_principale(RUBRIQUES){id_rubrique}>

		<BOUCLE_hierarchie(HIERARCHIE){" : "}>
		<a href="#URL_RUBRIQUE">#TITRE</a>
		</BOUCLE_hierarchie>

     <h1>#TITRE</h1>

     [(#LOGO_RUBRIQUE|right)]

     [(#TEXTE|justifier)]
 
     [<hr>(#NOTES)]

     </BOUCLE_principale>
</blockquote>
</body>
</html>

Si vous installez cette page sur votre site, ça ne va pas être spectaculaire...

Les articles contenus dans cette rubrique

Ajoutons la liste des articles contenus dans cette rubrique. Plaçons cette BOUCLE_articles à la fin de la BOUCLE_principale (après le texte et ses notes).

...
	<B_articles>Les articles :
	<ul>
	<BOUCLE_articles(ARTICLES){id_rubrique}>
		<li> <a href="#URL_ARTICLE">#TITRE</a>
	</BOUCLE_articles>
	</ul>
	</B_articles>

</BOUCLE_principale>
...

En réalité, cette boucle ne présente pas grand intérêt : elle affiche les articles sans classement particulier (elle ne tient pas compte des mots-clés de type d’articles). Nous l’installons pour l’instant telle quelle, afin d’avoir une première navigation possible sur le site. Nous reprendrons cette partie un peu plus loin dans ce tutorial.

Les sous-rubriques

Installons maintenant la boucle des sous-rubriques (après la BOUCLE_articles) :

...
	<B_sous_rubriques>Les sous-rubriques :
	<ul>
	<BOUCLE_sous_rubriques(RUBRIQUES){id_parent}{par titre}>
		<li> <a href="">#TITRE</a>
	</BOUCLE_sous_rubriques>
	</ul>
	<B_sous_rubriques>


</BOUCLE_principale>
...

Et là, on rencontre le vrai premier problème de notre tutorial : les rubriques définissant des genres de jeux sont mélangées avec des rubriques consacrées directement à des jeux.

Par exemple, dans la structure de démonstration, la rubrique « Action/aventure » contient à la fois, présentés exactement de la même manière :
-  deux sous-rubriques thématiques (« Exploration et énigmes » et « Survival horror »),
-  et deux rubriques de jeux (« Devil May Cry » et « Soul Reaver 2 »).

L’affichage de la boucle ci-dessus fournit donc la liste :
-  Devil May Cry,
-  Exploration et énigmes,
-  Soul Reaver 2,
-  Survival horror.

Or il faut impérativement différencier très nettement les rubriques « catégories de jeux » (utiles essentiellement à la navigation) et les rubriques « jeux » (qui donnent le titre des jeux).

Pour résoudre cette difficulté, nous allons utiliser le système des boucles. Aucune bidouille informatique donc, mais il va faut bien comprendre la logique du site et la logique des boucles.

La logique du site : une rubrique « Jeu » est une rubrique qui contient des articles ; une rubrique de « catégorie de jeux » ne contient pas directement d’articles. C’est la définition de notre site : tout article concernant un jeu est placé dans une rubrique portant le nom du jeu ; ainsi une rubrique de catégorie de jeu ne contient que des sous-rubriques de catégories et des rubriques portant le nom des jeux, mais jamais directement des articles (est-ce bien clair ?). Par exemple, dans notre cas :
-  « Soul Reaver 2 » et « Devil May Cry » contiennent les articles concernant ces jeux (tests, previews, etc.) ;
-  « Survival horror » et « Exploration et énigmes » ne contiennent par définition pas d’articles. S’il y a des jeux dans « Survival horror », les articles les concernant sont dans des sous-rubriques portant le nom de ces jeux, mais pas directement dans la rubrique « Survival... ».

Le but de la manoeuvre va donc consister à séparer les rubriques sans articles des rubriques avec des articles. Et le plus simple est de faire deux boucles différentes.

Les rubriques sans articles

Commençons par les sous-rubriques qui ne contiennent pas d’articles (c’est-à-dire les grandes catégories de type « Survival horror », « Exploration »...). Modifions la BOUCLE_sous_rubriques ainsi :

<BOUCLE_sous_rubriques(RUBRIQUES){id_parent}{par titre}>

		<BOUCLE_sans_articles(ARTICLES){id_rubrique}>
		</BOUCLE_sans_articles>
		<h3><a href="#URL_RUBRIQUE">#TITRE</a></h3>
		<//B_sans_articles>
		
	</BOUCLE_sous_rubriques>

Le principe de cette astuce est simple :

-  à l’intérieur de la BOUCLE_sous_rubriques, on insère une nouvelle BOUCLE_sans_articles, qui va récupérer les articles qu’elle contient. Notez que l’intérieur de la BOUCLE_sans_articles est vide : si la sous-rubriques contient des articles, ces derniers ne sont pas affichés (la boucle ne sert qu’à contrôler leur présence) ;

-  le #TITRE de la BOUCLE_sous_rubriques est inséré dans le texte optionnel « sans » de la BOUCLE_sans_articles. Juste avant le <//B_sans_articles>. Ainsi, le titre de la rubrique ne s’affiche que si BOUCLE_sans_articles ne contient aucun article (c’est-à-dire si la BOUCLE_sous_rubriques elle-même ne contient aucun article).

La BOUCLE_sous_rubriques, dans l’absolu, récupère bien toutes les rubriques (y compris celle des jeux). Mais le #TITRE (avec le lien hypertexte) n’est affiché que si la BOUCLE_sans_articles est vide.

Les rubriques de jeu (avec des articles)

Nous appliquons le principe exactement inverse à une BOUCLE_jeux (que nous pouvons placer juste avant BOUCLE_sous_rubriques).

<BOUCLE_jeux(RUBRIQUES){id_parent}{par titre}>

		<B_avec_articles>
		<h4><a href="#URL_RUBRIQUE">#TITRE</a></h4>
		[(#LOGO_RUBRIQUE|right)]
		<ul>
		<BOUCLE_avec_articles(ARTICLES){id_rubrique}>
		<li><a href="#URL_ARTICLE">#TITRE</a>
		</BOUCLE_avec_articles>
		</ul>
		</B_avec_articles>
		
	</BOUCLE_jeux>

Cette fois, le #TITRE de la rubrique est placé dans le texte conditionnel « avant » ; on affiche le #LOGO_RUBRIQUE (évidemment, à terme, on fera de beaux tableaux pour éviter les chevauchements disgracieux). Et au passage, on en profite pour afficher la liste des articles de la BOUCLE_avec_articles.

La BOUCLE_jeux et la BOUCLE_sous_rubriques sont au départ totalement identiques : leurs critères sont les mêmes. À l’intérieur de ces boucles, ce sont donc les mêmes rubriques qui sont traitées. En revanche, les boucles BOUCLE_avec_articles et BOUCLE_sans_articles servent de « filtres » : ils prennent chacune des rubriques de BOUCLE_jeux et BOUCLE_sous_rubriques, et vérifient la présence ou non d’articles.

Est-ce que l’on aurait pu ici utiliser le critère {doublons} ? Non, car la première boucle affichée (BOUCLE_sous_rubriques) traite bien toutes les sous-rubriques (seulement, le titre de ces sous-rubriques est affiché ou non selon les cas). Lui attribuer un critère {doublons} interdirait par la suite de traiter aucune de ces sous-rubriques. Ensuite, la BOUCLE_jeux associée à ce critère de {doublons} tenterait de récupérer toutes les sous-rubriques qui n’ont pas été traitées par la première boucle ; or toutes les sous-rubriques ont bien été traitées. La BOUCLE_jeux ne pourrait donc rigoureusement rien afficher.

Laissons maintenant cette page « rubrique.html », nous y reviendrons plus tard.

Auteur L’équipe de SPIP Publié le : Mis à jour : 26/10/12

Traductions : عربي, català, Español, français, italiano