Comenzaremos con un fichero «rubrique.html» virgen.
La primera versión de nuestro fichero será muy sencilla. Integramos todo el BOUCLE_hierarchie, que aquí no tiene ninguna particularidad.
<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 instalas esta página en tu sitio, no va a ser nada espectacular...
Los artículos que contiene esta sección
Añadimos la lista de los artículos que contiene esta sección. Situamos el bucle BOUCLE_articles al final del BOUCLE_principale (después del texto y sus notas).
...
<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 realidad, este bucle no presenta gran interés: muestra los artículos sin un orden particular (no tiene en cuenta las palabras clave de tipo de artículos). Por el momento, lo instalamos tal cual, con el fin de tener una primera posibilidad de navegación por el sitio. Retomaremos esta parte un poco más adelante en el tutorial.
Las subsecciones
Ahora instalamos el bucle de las subsecciones (después del bucle 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>
...
Y aquí se encuentra el primer problema verdadero de nuestro tutorial: las secciones que definen los tipos de juego están mezcladas con las secciones dedicadas directamente a los juegos.
Por ejemplo, en la estructura de demostración, la sección «Acción/aventura» contiene a la vez, presentadas exactamente de la misma manera:
- dos subsecciones temáticas («Exploración y enigmas» y «Survival horror»),
- y dos secciones de juegos («Devil May Cry» y «Soul Reaver 2»).
La presentación del bucle anterior nos da la lista:
- Devil May Cry,
- Exploración y enigmas,
- Soul Reaver 2,
- Survival horror.
Está claro que es completamente necesario distinguir con claridad las secciones «categorías de juegos» (útiles esencialmente para la navegación) y las secciones de «juegos» (que nos dan el título de los juegos).
Para resolver esta dificultad, vamos a usar el sistema de los bucles. No hará falta ningún truco informático, sólo será necesario entender bien la lógica del sitio y la lógica de los bucles.
La lógica del sitio: una sección «Juego» es una sección que contiene artículos; una sección de «categoría de juegos» no contiene artículos directamente. Es la definición de nuestro sitio: todo artículo relativo a un juego está situado en una sección que lleva el nombre del juego; de igual forma una sección de categoría de juego no contiene más que subsecciones de categorías y secciones que llevan el nombre de los juegos; nunca artículos directamente (¿está bien claro?). Por ejemplo, en nuestro caso:
- «Soul Reaver 2» y «Devil May Cry» contienen los artículos relacionados con estos juegos (pruebas, presentaciones, etc.);
- «Survival horror» y «Exploración y enigmas» por definición no contienen artículos. Si hay dos juegos en «Survival horror», los artículos relacionados están en las subsecciones que lleven el nombre de esos juegos, nunca directamente en la sección «Survival...».
El objetivo de la maniobra consistirá,por lo tanto, en separar las secciones sin artículos de las secciones con artículos. Y lo más sencillo es hacer dos bucles diferentes.
Las secciones sin artículos
Comencemos por las subsecciones que no contienen artículos (es decir, las grandes categorías de tipo «Survival horror», «Exploración»...). Modificamos el bucle BOUCLE_sous_rubriques así:
<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>
El principio de este truco es sencillo:
- dentro del bucle BOUCLE_sous_rubriques, se inserta un nuevo BOUCLE_sans_articles, que recupera los artículos que contiene aquel. Fíjate que el interior del BOUCLE_sans_articles está vacío: si las subsecciones contienen artículos, estos no se muestran (el bucle sólo sirve para controlar su presencia);
- el #TITRE del BOUCLE_sous_rubriques se inserta en el texto opcional «sin» del BOUCLE_sans_articles. Justo antes de <//B_sans_articles>
. Así, el título de la sección sólo se muestra si BOUCLE_sans_articles no contiene ningún artículo (es decir, si el propio BOUCLE_sous_rubriques no contiene ningún artículo).
El bucle BOUCLE_sous_rubriques, recupera absolutamente todas las secciones (incluida la de los juegos). Pero el título #TITRE (con el enlace de hipertexto) sólo se muestra si el BOUCLE_sans_articles está vacío.
Las secciones de juego (con artículos)
Aplicamos el principio exactamente a la inversa en un BOUCLE_jeux (que podemos situar justo antes del 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>
Esta vez, el #TITRE de la sección está situado en el texto condicional «anterior»; se muestra el #LOGO_RUBRIQUE (evidentemente, al final, harán falta unas bonitas tablas para evitar las superposiciones desafortunadas). Y, de paso, se aprovecha para mostrar la lista de los artículos del BOUCLE_avec_articles.
El BOUCLE_jeux y el BOUCLE_sous_rubriques son en principio totalmente idénticos: sus criterios son los mismos. Dentro de estos bucles, por lo tanto, se tratan las mismas secciones. En cambio, los bucles BOUCLE_avec_articles y BOUCLE_sans_articles sirven de «filtros»: toman cada una de las secciones de BOUCLE_jeux y BOUCLE_sous_rubriques, y verifican la presencia o no de artículos.
¿Se hubiera podido usar aquí el criterio {doublons}
? No, porque el primer bucle mostrado (BOUCLE_sous_rubriques) trata todas las subsecciones (solamente el título de estas subsecciones se muestra o no según los casos). Atribuirle un criterio {doublons}
impediría tratar después ninguna de estas subsecciones. A continuación, el BOUCLE_jeux asociado a este criterio de {doublons}
intentaría recuperar todas las subsecciones que no hayan sido tratadas por el primer bucle; pero todas las subsecciones han sido tratadas. El BOUCLE_jeux no podría mostrar absolutamente nada.
Dejaremos ahora esta página «rubrique.html» para retomarla más tarde.