Un sumari per cada màquina

Els aficionats als jocs de vídeo tenen, generalment, només una màquina (dues pels addictes, tres pels col·leccionistes...). Una pàgina amb un sumari general, tot i que justificada a l’entrada del lloc Web (el visitant indica l’URL del lloc, per tant no sabem a priori quina màquina utilitza), conté massa informacions supèrflues pel propietari que només té una màquina: el posseïdor d’una Playstation 2 no està interessat per l’últim joc que ha sortit a Dreamcast.

Per tant, hem de poder presentar un sumari diferent per cada tipus de màquina. Un sumari que només mostri els jocs d’aquesta màquina.

Crearem, per tant, un esquelet el contingut del qual canviï en funció de la màquina. Anomenarem aquests fitxers: «sommaire_machine.php3» i «sommaire_machine.html». Com que la màquina ha estat indicada, en la nostra estructura, per una paraula clau, aquestes pàgines dependran d’un «id_mot». Cada màquina diferent serà cridada per una URL del tipus:
-  sommaire_machine.php3?id_mot=23 (23 és el número de la paraula clau de la màquina).

Tornem de nou al nostre sumari general: el que hem de fer ara és incloure els enllaços cap aquests sumaris especialitzats; la creació automàtica d’aquests enllaços (amb els «id_mot» corresponents) ens evitarà fer els tests buscant els números (id_mot) de cada màquina. A «sommaire.html», inserim el següent bucle:

<table cellpadding=5><tr>
<BOUCLE_somm_mac(MOTS){type=Machines}{par titre}>
<td><a href="sommaire_machine.php3?id_mot=#ID_MOT">#LOGO_MOT</a></td>
</BOUCLE_somm_mac>
</tr></table>

Atenció: si hem fet logotips amb imatge canviant, l’enllaç no funcionarà correctament, ja que SPIP afegirà una ordre javascript. El codi que hi ha més amunt només funciona si el logotip de cada paraula està constituït per un únic fitxer (no imatge canviant).

El mitjà més senzill i el més eficaç per evitar aquest inconvenient consisteix en no fer servir directament #LOGO_MOT, que construeix la totalitat de l’etiqueta HTML de la imatge, eventualment amb un petit codi javascript per gestionar el canvi d’imatge, sinó que en el seu lloc cridarem una imatge el fitxer del qual sigui: [(#LOGO_MOT|fichier)] (que retorna únicament el nom del fitxer de la imatge).

El bucle esdevé:

<table cellpadding=5><tr>
<BOUCLE_somm_mac(MOTS){type=Machines}{par titre}>
<td><a href="sommaire_machine.php3?id_mot=#ID_MOT"><img src='IMG/[(#LOGO_MOT|fichier)]' border=0></a>
</td>
</BOUCLE_somm_mac>
</tr></table>

El fitxer «sommaire_machine.php3

Com sempre:

<?php
$fond = "sommaire_machine";
$delais = 24 * 3600;

include ("inc-public.php3");
?>

L’esquelet del sumari per màquina

Inútil complicar-nos la vida: dupliquem el fitxer «sommaire.html», i l’anomenem «sommaire_machine.html».

Com que aquesta depèn d’un «id_mot», comencem per afegir-hi un BOUCLE_principale que contindrà la totalitat dels altres bucles. En tenim prou afegint la crida d’aquest bucle just desprès de <body> i tancant-la just abans de </body> (al capdavall del fitxer):

<body>
<BOUCLE_principale(MOTS){id_mot}>

     ...

</BOUCLE_principale>
</body>

El títol de la pàgina, que fins aquest moment només contenia: <h1>#NOM_SITE_SPIP</h1>, està modificat per mostrar el nom i el logotip de la màquina (és a dir per la paraula clau corresponent a «id_mot»):

<h1>#NOM_SITE_SPIP / #LOGO_MOT #TITRE</h1>

El BOUCLE_somm_mac, que mostra tots els logotips de les màquines per crear els enllaços cap als sumaris específics, no ha de contenir el logotip de la màquina principal (ja som a la pàgina en qüestió, per tant és inútil crear un enllaç cap a ella mateixa). N’hi ha prou amb la inserció del criteri {exclus} a l’interior de la definició d’aquest bucle:

<BOUCLE_somm_mac(MOTS){type=Machines}{exclus}{par titre}>
...
</BOUCLE_somm_mac>

El BOUCLE_tests, que mostra els últims tests publicats, a partir d’ara només ha de mostrar els tests que estan relacionats amb els jocs de la màquina seleccionada. Per això, afegirem a l’interior d’aquest bucle un BOUCLE_verif_test, que verificarà que cada article es relacioni correctament amb la màquina escollida.

Un inconvenient a partir d’ara: el BOUCLE_tests mostrava els cinc últims tests. D’ara endavant, sobre aquests cinc articles, nosaltres només en seleccionem aquells que estan relacionats amb la nostra màquina. És molt probable que ens doni menys de cinc articles, i en alguns casos extrems, no ens en mostrarà cap. Modifiquem el criteri, i decidim mostrar no només els cinc últims test ({0,5}), sinó també els tests publicats en els últims tres mesos ({age<90}); podrem modificar aquest valor en funció de l’activitat real del lloc Web (si el lloc Web és molt actiu, en reduirem el període d’aquest bucle, si el lloc Web publica pocs articles, podrem allargar-lo).

De passada, suprimim el petit bucle que mostrava el logotip de les màquines relacionades: això esdevé inútil ja que aquesta pàgina només mostra les informacions d’una única màquina.

El bucle esdevé:

<BOUCLE_tests(ARTICLES){titre_mot=test}{par date}{inverse}{age < 90}>
<BOUCLE_verif_test(ARTICLES){id_article}{id_mot}>
	<p><div style="border:1px solid black">
		
	[(#LOGO_ARTICLE_RUBRIQUE|left|#URL_ARTICLE)]

	<BOUCLE_rub_tests(RUBRIQUES){id_rubrique}>
	<h3>#TITRE</h3>
	</BOUCLE_rub_tests>

	<h4>#TITRE</h4>
	
	<BOUCLE_note_tests(MOTS){id_article}{type=Note}>
	<b>NOTE : #TITRE/10</b><p>
	</BOUCLE_note_tests>
			
	[(#DESCRIPTIF)]
	<p align="right"><a href="#URL_ARTICLE">Lire ce test...</a>
	</div>
</BOUCLE_verif_test>
</BOUCLE_tests>

El principi és idèntic per les prèvies, les solucions, les astúcies, les notícies: afegim un bucle de verificació i suprimim el bucle que mostra la llista de màquines relacionades:

<B_previews>
<p><b>Previews :</b>
<ul>
<BOUCLE_previews(ARTICLES){titre_mot=preview}{par date}{inverse}{age < 90}><BOUCLE_verif_previews(ARTICLES){id_article}{id_mot}>	
	<BOUCLE_rub_previews(RUBRIQUES){id_rubrique}>
	<li><b>#TITRE</b> /
	</BOUCLE_rub_previews>
	<a href="#URL_ARTICLE">#TITRE</a>
</BOUCLE_verif_previews></BOUCLE_previews>
</ul>
</B_previews>

<B_soluces>
<p><b>Soluces :</b>
<ul>
<BOUCLE_soluces(ARTICLES){titre_mot=soluce}{par date}{inverse}{age < 90}><BOUCLE_verif_soluces(ARTICLES){id_article}{id_mot}>
	<BOUCLE_rub_soluces(RUBRIQUES){id_rubrique}>
	<li><b><a href="#URL_ARTICLE">#TITRE</a></b>
	</BOUCLE_rub_soluces>
</BOUCLE_verif_soluces></BOUCLE_soluces>
</ul>
</B_soluces>

<B_astuces>
<p><b>Astuces :</b>
<ul>
<BOUCLE_astuces(ARTICLES){titre_mot=astuces}{par date}{inverse}{0,5}><BOUCLE_verif_astuces(ARTICLES){id_article}{id_mot}>	
	<BOUCLE_rub_astuces(RUBRIQUES){id_rubrique}>
	<li><b><a href="#URL_ARTICLE">#TITRE</a></b>
	</BOUCLE_rub_astuces>
</BOUCLE_verif_astuces></BOUCLE_astuces>
</ul>
</B_astuces>

<B_news>
<p><b>News :</b>
<ul>
<BOUCLE_news(ARTICLES){titre_mot=news}{par date}{inverse}{0,5}><BOUCLE_verif_news(ARTICLES){id_article}{id_mot}>	
	<BOUCLE_rub_news(RUBRIQUES){id_rubrique}>
	<li><b><a href="news_jeu.php3?id_rubrique=#ID_RUBRIQUE">#TITRE</a>:</b>
	</BOUCLE_rub_news>
	#TITRE
</BOUCLE_verif_news></BOUCLE_news>
</ul>
</B_news>

Important. Fixeu-vos més amunt que el bucle de verificació està «enganxat» al primer bucle (per exemple, entre <BOUCLE_previews(ARTICLE)...> i <BOUCLE_verif_previews(ARTICLE)...>, no hi ha ni espai ni retorn). De fet, el text condicional abans del primer bucle (aquí fem esment a «Previews») està activat si el bucle conté com a mínim un caràcter. Si hi ha un espai o un canvi de línia abans la crida del bucle de verificació, llavors encara que el bucle no mostri cap article (perquè durant tres mesos no s’ha publicat cap article d’aquest tipus per aquesta màquina), aquest espai paràsit activarà la presentació del codi condicional.

Vegem ara la presentació de les properes sortides. Podem decidir crear una nova pàgina de sortides, que es refereixi únicament a la màquina seleccionada, però aquí nosaltres preferim mostrar directament les sortides en el sumari específic (les sorties no són gaire nombroses per les diferents màquines). Aplicant els mateixos mètodes que anteriorment, substituirem l’enllaç «Les properes sortides» per:

<B_sorties>
<b>Les sorties #TITRE du prochain mois:</b>
<ul>
<BOUCLE_sorties(ARTICLES){titre_mot=Date_sortie}{par date}{age < 0}><BOUCLE_sorties_verif(ARTICLES){id_article}{id_mot}>
	<li>[(#DATE|affdate)]:
	
	<BOUCLE_rub_sorties(RUBRIQUES){id_rubrique}>
	#TITRE
	</BOUCLE_rub_sorties>
	
</BOUCLE_sorties_verif></BOUCLE_sorties>
</ul>
</B_sorties>

Seguint el mateix principi, mostrem la llista dels jocs preferits per aquesta màquina durant els últims sis mesos:

<B_notes>
<b>Nos jeux préférés depuis 6 mois:</b>
<ul>
<BOUCLE_notes(ARTICLES){type_mot=note}{par titre_mot}{inverse}{age<180}><BOUCLE_notes_verif(ARTICLES){id_article}{id_mot}>
	<BOUCLE_rub_notes(RUBRIQUES){id_rubrique}>
	<li> #TITRE
	</BOUCLE_rub_notes>
	<BOUCLE_lanote(MOTS){id_article}{type=note}>
	(#TITRE/10)
	</BOUCLE_lanote>
	
</BOUCLE_notes_verif></BOUCLE_notes>
</ul>
</B_notes>

Ara com ara, la única subtilesa és la classificació dels articles associats a les paraules clau del tipus «note» segons el criteri {par titre_mot}{inverse} (funció que apareix a la versió 1.3 de SPIP). De fet, les paraules tipus «note» tenen el format «01», «02»..., «10» ; per tant, podem demanar de classificar-les de 10 a 1.

No obstant, aquesta presentació no ens convé encara: pretenem mostrar els nostres «jocs preferits», mentre que aquí es tractaria només d’una classificació per nota. Si un joc ha sortit durant els últims sis mesos i ha obtingut una nota catastròfica, el trobarem dins dels «jocs preferits» (al capdavall de la llista, però en tot cas hi serà present)!

Hem de trobar, per tant, un manera de mostrar només els jocs que tinguin una nota superior a «07» (elecció arbitrària). Si penseu fer servir per aconseguir-ho el BOUCLE_notes, afegint-hi simplement la menció {titre_mot>07}, no us funcionarà: SPIP només accepta un sol criteri, del tipus (MOTS), en les paraules clau a l’interior dels bucles.

Farem servir el BOUCLE_lanote (que publica la nota), i li demanarem seleccionar només les notes superiors a 7 (ja que aquí es tracta d’un bucle del tipus (MOTS), li podem posar diverses restriccions a les paraules clau). El BOUCLE_rub_notes, que mostra el títol del joc, es col·loca llavors en el text opcional desprès del BOUCLE_lanote:
-  si la nota és superior a 7, el BOUCLE_rub_notes es realitza;
-  sinó no es mostra res.

Alerta: sempre és delicat col·locar un bucle en el text opcional d’un altre bucle (SPIP pot barrejar fàcilment les coses). Per una estranya raó, això és possible en el text opcional desprès, però no en el text opcional abans.

Sabent que només recuperarem els articles que tinguin una nota de «08», «09», «10», classificats del millor al menys bo, considerem inútil de recordar la nota en sí. El BOUCLE_lanote, per tant, està buit, només serveix per activar o desactivar el BOUCLE_rub_notes.

Finalment, donat que el BOUCLE_lanote esdevé un nou «filtre» aplicat a la selecció d’articles, cal suprimir els espais i els retorns que hi pugui haver a l’entorn d’aquest bucle, per tal d’activar l’expressió «Els nostres jocs preferits» només quan hi hagi com a mínim un article a mostrar.

Això ens dóna:

<B_notes>
<b>Nos jeux préférés depuis 6 mois:</b>
<ul>
<BOUCLE_notes(ARTICLES){type_mot=note}{par titre_mot}{inverse}{age<180}><BOUCLE_notes_verif(ARTICLES){id_article}{id_mot}><BOUCLE_lanote(MOTS){id_article}{titre>07}{type=note}>
	</BOUCLE_lanote>
	<BOUCLE_rub_notes(RUBRIQUES){id_rubrique}>
	<li> <a href="#URL_RUBRIQUE">#TITRE</a>
	</BOUCLE_rub_notes>
	</B_lanote></BOUCLE_notes_verif></BOUCLE_notes>
</ul>
</B_notes>

Tot això pot semblar una mica indigest però el que importa és que funciona i, com sempre, sense cap funció PHP!

Ara que les pàgines de sumaris específics estan gairebé acabades, constatem, passant de l’una a l’altre, que algunes pàgines estan buides. De fet, aquí només mostrem les informacions dels darrers tres mesos (pels tests, les notícies...). Si a una màquina no se li ha relacionat cap article en els darrers tres mesos, o si una màquina encara no ha tngut mai cap article (tot i que això estigui previst per una paraula clau, és molt possible que ningú hagi escrit encara un article sobre la temàtica dels jocs Linux).

Per tant, es necessari modificar el BOUCLE_somm_mac (el que mostra els logotips de les diferents màquines) per tal que només es mostrin les màquines que tinguin realment articles publicats en els darrers tres mesos. Per això n’hi haurà prou afegint-hi un bucle que verifiqui la presència d’articles amb una data inferior als tres mesos associats a la paraula clau. Això ens dóna:

<BOUCLE_somm_mac(MOTS){type=Machines}{exclus}{par titre}>
<BOUCLE_verif_somm(ARTICLES){id_mot}{0,1}{age < 90}>
	<td>
	<a href="sommaire_machine.php3?id_mot=#ID_MOT"><img src='IMG/[(#LOGO_MOT|fichier)]' border=0></a>
	</td>
</BOUCLE_verif_somm>
</BOUCLE_somm_mac>

Hem de pensar a fer la mateixa substitució a la pàgina «sommaire.html» del sumari general (en aquest cas, cal suprimir el criteri {exclus}).

Autor merce Publié le : Mis à jour : 21/03/23

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