Nuestro sitio tiene ahora lo que habíamos previsto al principio:
- la división en secciones temática (por tipo de juego);
- en cada artículo se indica a qué máquinas afecta;
- la gestión de los tipos de artículo (pruebas, noticias, previos...).
La siguiente etapa consistirá en crear la navegación en paralelo (navegar por máquina única, o según un tipo de artículos).
Pero antes de ponernos a desarrollar esta navegación transversal, vamos a complicarnos un poco las cosas, añadiendo otros dos elementos indispensables en los sitios de videojuegos:
- la nota asignada a un juego;
- la fecha oficial de salida del juego.
Estos dos elementos, ahora, deberían ser fáciles de instalar con el sistema de palabras clave. Asimismo, nos permitirán ofrecer las navegaciones transversales (en concreto, una página de los juegos con mejor calificación, y une página para anunciar las próximas salidas).
Adjudicar una nota a un juego
Es lógico que queramos adjudicar la nota después de una prueba:
- para los previos, sería demasiado precipitado, pues no se trata de una versión definitiva; y en los demás tipos de artículo (noticias, soluciones...), una puntuación simplemente carece de sentido;
- es imposible asignar una nota a una sección-juego, ya que en esa sección puede haber diferentes versiones de un juego.
Por lo tanto, elegimos que, para el funcionamiento de nuestro sitio, la note estará ligada con un artículo de pruebas. En una sección de un mismo juego, como puede haber varias pruebas diferentes (según las críticas, según las máquinas...), habrá varias notas, asociadas con esas pruebas.
Elegimos, arbitrariamente, una puntuación sobre 10 (desde 1 para pésimo, a 10 para genial).
Volvemos a la página de gestión de las palabras clave:
- creamos un grupo de palabras titulado «Nota»;
- en este grupo de palabras, creamos 10 palabras clave, cuyos nombres son sucesivamente «01», «02», ..., «09», «10». Esto dará lo siguiente:
Como sucedía con las máquinas, se puede asignar un logo diferente a cada nota (por ejemplo estrellas), y después en los esqueletos utilizar los logos en lugar del número indicado por la palabra clave en letra. Por simple pereza, nos vamos a contentar con utilizar aquí el texto de las palabras clave.
Ahora, antes de la publicación de una prueba, además de seleccionar las palabras clave correspondientes al tipo de artículo («Test», aquí) y las de las máquinas relacionadas, habrá que pensar en elegir una puntuación. Si se quiere un funcionamiento coherente, es lógico no seleccionar más que una sola nota por artículo.
Integrar la nota en los esqueletos
El bucle que permite mostrar la puntuación de un artículo es muy sencillo.
- En «article.html», ponemos la nota del artículo bajo la firma del autor (antes del #PS y las #NOTES):
<BOUCLE_note(MOTS){id_article}{inverse}{type=Note}>
[<p align="right"><b>NOTA : (#TITRE)/10</b>]
</BOUCLE_note>
También añadimos la mención de la nota en las «otras pruebas de este juego». El BOUCLE_tests se modifica así:
<B_tests><p>Las pruebas de este juego :
<ul>
<BOUCLE_tests(ARTICLES){id_rubrique}{titre_mot=Test}>
<li>
<BOUCLE_tests_machines(MOTS){id_article}{type=Machines}>
[(#LOGO_MOT)]
</BOUCLE_tests_machines>
<a href="#URL_ARTICLE">#TITRE</a>
<BOUCLE_autre_note(MOTS){id_article}{inverse}{type=Note}>
[ - NOTA : (#TITRE)/10]
</BOUCLE_autre_note>
- [(#DATE|affdate)]
</BOUCLE_tests>
</ul>
</B_tests>
- Este mismo BOUCLE_tests se cambia directamente en «rubrique.html».
Ya está, integrar una puntuación de la prueba ¡no nos ha costado más de cinco minutos! Esto era muy fácil, a continuación veremos cómo aprovechar más la puntuación adjudicada a los juegos.
La fecha oficial de lanzamiento de los juegos
La presentación de la fecha oficial de lanzamiento de los juegos presenta mayores problemas. Une fecha no puede ser una palabra-clave (ya habíamos subrayado que las palabras-clave debían ser elementos estables de la estructura: por lo tanto ¡no se deben crear palabras-clave de fechas!).
Hay otra posibilidad: utilizar la fecha de primera publicación de determinados artículos. Problema: ¿qué artículos?
- Las fechas de lanzamiento se saben (de forma más o menos aproximada) con bastante antelación, por eso no se puede esperar a que haya artículos dedicados al juego para poder anunciarlo.
- Los artículos de un juego pueden tratar sobre una plataforma o sobre varias. O las fechas de lanzamiento para cada plataforma pueden ser distintas. Por eso, difícilmente se pueden utilizar los artículos comunes a varias plataformas para anunciar las fechas. Por ejemplo, Alone in the Dark: the new nightmare, es muy similar en sus versiones para Playstation 2 y Dreamcast, por eso es lógico hacer una prueba única para las dos versiones; en cambio, las fechas de lanzamiento son diferentes en cada plataforma.
- Mientras que el juego no salga a la venta, las fechas anunciadas deberán corregirse con frecuencia (retrasos, mayor precisión...). La webmestre tendrá que encontrar fácilmente el lugar donde puede cambiar esta información.
En la estructura de nuestro sitio, podemos considerar que la fecha de lanzamiento de un juego es una información independiente del resto de informaciones (pruebas, previos, etc.); por eso no podemos usar la «fecha de primera publicación» de otro artículo para indicar esta fecha de salida. Vamos a proceder de la manera siguiente (ciertamente, existen otras):
- creamos un nuevo tipo de artículo (además de las pruebas, previos, etc.); lo instalamos en el grupo «Type_article», y lo llamaremos «Date_sortie»;
- en la sección del juego, creamos tantos artículos como necesitemos para cada versión del juego con distinta fecha de lanzamiento. Son artículos vacíos: no tienen más que el título y una fecha de «publicación» (ajustada manualmente a la fecha de lanzamiento del juego). El propio título carece de importancia, no lo vamos a mostrar en el sitio público; en cambio, el título nos facilitará la navegación por el sitio privado;
- a cada artículo asociado con «Date_sortie», se le asigna también la palabra-clave de la máquina afectada por esa fecha.
Veamos por ejemplo cómo se hace con Resident Evil: Code Veronica:
- crear un artículo nuevo en la sección «Code Veronica»;
- titular el artículo «Lanzamiento Veronica Dreamcast» (título de conveniencia, sin otro interés que identificar estos artículos en el espacio privado);
- asignarle las palabras-clave «Dreamcast» y «Date_sortie»;
- «publicar» el artículo, y modificar su fecha para «mayo 2000» (si no se sabe el día exacto, se puede seleccionar «n.c.» en el menú desplegable del día);
- repetir la operación con un nuevo artículo «Lanzamiento Veronica PS2»;
- asignarle las palabras-clave «Playstation 2» y «Date_sortie»;
- publicar y cambiar la fecha (13 septiembre 2001).
Para el primer artículo, queda así:
El autor de estos artículos es totalmente indiferente (es inútil perder el tiempo en suprimirlo, de todas formas no se utilizará).
Insistimos en el interés de nuestra forma de mostrar los artículos de una sección en función del tipo de artículo (pruebas, previos,...): los artículos que tengan la palabra-clave «Date_sortie» no se verán (con los esqueletos estándar de SPIP, estos «artículos» totalmente vacíos se mostrarían igual que los demás).
Mostrar la fecha en los artículos
Cuando se está viendo un artículo (de un juego), la (las) fecha(s) de lanzamiento están contenidas en artículos asociados con la palabra «Date_sortie», situados en la misma sección. Para saber la fecha de lanzamiento de un juego desde un artículo de pruebas (por ejemplo), es necesario por lo tanto recuperar el (o los) artículo(s) instalados en la misma sección y que tengan la palabra-clave «Date_sortie».
En el esqueleto «article.html», insertamos (por ejemplo justo después del título):
<BOUCLE_sortie(ARTICLES){id_rubrique}{titre_mot=Date_sortie}>
<li> #TITRE :
[<b>(#DATE|affdate)</b>]
</BOUCLE_sortie>
Pero habíamos decidido que no se utilizaría el título del artículo que contiene la fecha. Queremos unificar la presentación de esta información sin que ello nos obligue poner el título siempre de la misma manera. Por eso no vamos a mostrar el #TITRE de este artículo-contenedor (ni siquiera el título de la sección, ya sabemos el título del juego, no hace falta recordarlo aquí). En cambio, para diferenciar (en su caso) las diferentes fechas de salida en función de las máquinas, insertaremos:
<BOUCLE_sortie(ARTICLES){id_rubrique}{titre_mot=Date_sortie}>
<li> Fecha de salida
<BOUCLE_machine_sortie(MOTS){id_article}{type=Machines}{", "}>#TITRE</BOUCLE_machine_sortie> :
[<b>(#DATE|affdate)</b>]
</BOUCLE_sortie>
Que cuando se visite producirá:
- Fecha de salida Playstation: 22 agosto 2001
- Fecha de salida Dreamcast: mayo 2001
Todavía no estamos satisfechos con esto (¡es un tutorial, podemos ser exigentes!): el BOUCLE_sortie muestra las fechas de salida para todas las máquinas; pero claro, nuestro artículo puede que no se refiera a todas ellas. Por eso queremos que no se vean más que les fechas de salida correspondientes a las máquinas tratadas en el artículo.
Cuidado, esto se complica, y usaremos una sutileza de los bucles:
<BOUCLE_mac2(MOTS){id_article}{type=Machines}>
<BOUCLE_sortie(ARTICLES){id_rubrique}{titre_mot=Date_sortie}>
<BOUCLE_verifier_mot(ARTICLES){id_article}{id_mot}>
<li> Fecha de salida
<BOUCLE_machine_sortie(MOTS){id_article}{type=Machines}{", "}>#TITRE</BOUCLE_machine_sortie> :
[<b>(#DATE|affdate)</b>]
</BOUCLE_verifier_mot>
</BOUCLE_sortie>
</BOUCLE_mac2>
Puedes reconocer el BOUCLE_sortie y el BOUCLE_machine_sortie, que no hemos modificado. En cambio, aparecen dos bucles.
(1) El conjunto se sitúa en un BOUCLE_mac2, que va a recuperar las palabras-clave de las máquinas asociadas con este artículo. Dentro de este bucle, tenemos por lo tanto un cierto valor para «id_mot» (el identificador de cada máquina afectada por el artículo).
(2) El BOUCLE_sortie, no modificado, recupera todos los artículos de la sección asociados con la palabra-clave «Date_sortie». Fíjate: este bucle no utiliza «id_mot», por eso los artículos de este bucle son a la vez bucles asociados con la palabra-clave de ese «id_mot» y que no están asociados con ella. Segundo punto importante, es un bucle (ARTICLES), este bucle no devuelve ninguna información sobre las palabras-clave; por lo tanto el valor de «id_mot» proporcionado por BOUCLE_mac2 permanece inalterado en el interior de este bucle.
(3) El BOUCLE_verif_mot es una sutileza interesante: es un bucle (ARTICLES) que selecciona el artículo cuyo identificador es «id_article»; claro que ya estamos en el BOUCLE_sortie, el cual ya ha devuelto un artículo. Por lo tanto ea BOUCLE_verif_mot devuelve exactamente ¡el mismo resultado que el bucle precedente! Con la diferencia de que el BOUCLE_verif_mot instaura un criterio suplementario, {id_mot}
, por lo que el artículo entonces debe estar asociado con la palabra-clave «id_mot». Resultado: si el artículo devuelto por BOUCLE_sortie está asociado con la palabra-clave «id_mot», se continúa; si el artículo de BOUCLE_sortie no está asociado, se detiene y se pasa al siguiente.
- También se puede decir que el BOUCLE_verif_mot es un filtro: toma el artículo y comprueba si corresponde con el criterio de la palabra-clave.
- Se puede presentar de otra forma: BOUCLE_verif_mot sólo es un criterio de selección suplementario para el BOUCLE_sortie. Lo más sencillo, en efecto, hubiera sido no utilizar BOUCLE_verif_mot, sino añadir un criterio a BOUCLE_sortie, así:
<BOUCLE_sortie(ARTICLES){id_rubrique}{id_mot}{titre_mot=Date_sortie}>
Es decir: recuperar los artículos de la misma sección asociados con la máquina «id_mot» y con la palabra-clave «Date_sortie». Esto hubiera sido más directo, pero por desgracia SPIP no acepta este tipo de construcciones (en un bucle se necesita un solo criterio que lleve hacia las palabras-clave). Por lo tanto, un bucle así es rechazado por SPIP.
Te habrás dado cuenta de que hemos empalmado cuatro bucles sucesivos para mostrar una información tan poco importante como ¡la fecha de salida de un juego! Podemos deplorarlo, pero es preferible pensar que, si se ha comprendido bien la lógica de los bucles, las posibilidades de SPIP son mucho más extensas de lo que los esqueletos estándar permiten suponer.
N.B. Utilizando un poco de código PHP muy sencillo, se habría obtenido el mismo resultado con un solo bucle. Cuando desarrollemos un sitio, ciertamente será ventajoso ganar tiempo eligiendo la versión resumida que utiliza un poco de PHP. Pero teníamos que demostrar que sin necesidad de PHP pueden obtenerse ciertos resultados.