Una home page per ogni piattaforma

Gli appassionati dei videogiochi hanno di solito una sola piattaforma (due per i maniaci, tre per i collezionisti...). Una home page generica, anche se è giustificata all’arrivo del sito (il visitatore indica l’URL del sito, quindi non si conosce a priori quale piattaforma usa), contiene troppe informazioni superflue per il proprietario di una sola piattaforma: chi possiede una Playstation 2 non è interessato all’ultimo gioco uscito per la Dreamcast.

Per tale ragione è necessario poter presentare una home page diversa per ogni piattaforma; una home page che mostri solo i giochi di quella piattaforma.

Creiamo dunque un modello il cui contenuto cambia a seconda della piattaforma. Chiameremo questi modelli: "home_piattaforma.php3" e "home_piattaforma.html". La piattaforma, nella nostra struttura, è indicata da una parola chiave, perchiò queste pagine dipenderanno da un "id_mot". Ogni singola piattaforma verrà chiamata da un URL tipo:
-  home_piattaforma.php3?id_mot=23 (23 rappresenta il numero di parola chiave della piattaforma).

Ritorniamo alla nostra home page generica: vi includiamo i link verso queste home page specifiche; la creazione automatica di questi link (con l’"id_mot" corrispondente) ci eviterà di dover effettuare i test cercando i numeri (id_mot) di ogni piattaforma. Nel file "sommaire.html" inseriamo il ciclo seguente:

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

Attenzione: se abbiamo creato logo con roll-over, il link non funzionerà correttamente poiché SPIP aggiungerà un comando javascript. Il codice sopramenzionato funziona solo a condizione che il logo di ogni parola sia costituito da un unico file (nessuna immagine di roll-over).

Il mezzo più semplice ed efficace di evitare il problema è di non utilizzare direttamente #LOGO_MOT, che costruisce integralmente il tag HTML dell’immagine, eventualmente con un piccolo codice javascript per gestire il roll-over, ma al suo posto la chiamata di una immagine il cui file è: [(#LOGO_MOT|fichier)] (ce qui retourne uniquement le nom du fichier de l’image.

Il ciclo diventa:

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

Il file "home_piattaforma.php3"

Come sempre:

<?
$fond = "home_piattaforma";
$delais = 24 * 3600;

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

Il modello della home per piattaforma

Inutile complicarci la vita: facciamo una copia del file "sommaire.html", e rinominiamolo "home_piattaforma.html".

Poiché questo file dipende da un "id_mot", cominciamo aggiungendo un ciclo BOUCLE_principale che conterrà tutti gli altri cicli. È sufficiente aggiungere la chiamata di questo ciclo appena dopo il tag HTML <body> e di chiuderla appena prima del tag </body> (in fondo al file):

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

     ...

</BOUCLE_principale>
</body>

Il titolo della pagina, che fino ad ora conteneva solo: <h1>#NOM_SITE_SPIP</h1, viene modificato per visualizzare il nome e il logo della piattaforma (ovvero, della parola chiave corrispondente a "id_mot"):

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

Il ciclo BOUCLE_home_piatt, che mostra tutti i logo delle piattaforme per creare i link verso le home page specifiche, non deve più contenere il logo della piattaforma principale (siamo già su questa pagina, è quindi inutile creare un link verso se stessa). È sufficiente inserire il criterio {exclus} nella definizione di questo ciclo:

<BOUCLE_home_piatt(MOTS){type=Piattaforme}{exclus}{par titre}>
...
</BOUCLE_home_piatt>

Il ciclo BOUCLE_test, che mostra gli ultimi test pubblicati, deve ora visualizzare solo i test che riguardano i giochi sulla piattaforma selezionata. Per fare ciò, aggiungiamo all’interno di questo ciclo un ciclo BOUCLE_verif_test, che verifica per ogni articolo se esso tratta della piattaforma scelta.

Inconveniente: il ciclo BOUCLE_test mostrava gli ultimi cinque test. Ora, su questi cinque articoli, noi scegliamo solo quelli che riguardano la nostra piattaforma. È molto probabile che ciò dia meno di cinque articoli, e in alcuni casi estremi non verrà visualizzato nessun articolo. Modifichiamo il criterio e decidiamo di visualizzare non gli ultimi cinque test ({0,5}), ma tutti i test pubblicati negli ultimi tre mesi ({age<90}); possiamo modificare questo valore a seconda della reale attività del nostro sito (se il sito è molto attivo ridurremmo il valore di questo ciclo, se invece il sito pubblica pochi articoli possiamo aumentare tale valore).

Durante il passaggio, cancelliamo il piccolo ciclo che serviva a mostrare il logo delle piattaforme interessate: esso è inutile, perché questa pagina mostra solo le informazioni riguardanti una sola piattaforma.

Il ciclo diventa:

<BOUCLE_test(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_test(RUBRIQUES){id_rubrique}>
	<h3>#TITRE</h3>
	</BOUCLE_rub_test>

	<h4>#TITRE</h4>
	
	<BOUCLE_voto_test(MOTS){id_article}{type=Voto}>
	<b>VOTO: #TITRE/10</b><p>
	</BOUCLE_voto_test>
			
	[(#DESCRIPTIF)]
	<p align="right"><a href="#URL_ARTICLE">Leggi questo test...</a>
	</div>
</BOUCLE_verif_test>
</BOUCLE_test>

Il principio è identico per le anteprime, le soluzioni, i trucchi e le news: aggiungiamo un ciclo di verifica e cancelliamo il ciclo che mostra l’elenco delle piattaforme interessate:

<B_anteprime>
<p><b>Anteprime:</b>
<ul>
<BOUCLE_anteprime(ARTICLES){titre_mot=anteprima}{par date}{inverse}{age < 90}><BOUCLE_verif_anteprime(ARTICLES){id_article}{id_mot}>	
	<BOUCLE_rub_anteprime(RUBRIQUES){id_rubrique}>
	<li><b>#TITRE</b> /
	</BOUCLE_rub_anteprime>
	<a href="#URL_ARTICLE">#TITRE</a>
</BOUCLE_verif_anteprime></BOUCLE_anteprime>
</ul>
</B_anteprime>

<B_soluzioni>
<p><b>Soluzioni:</b>
<ul>
<BOUCLE_soluzioni(ARTICLES){titre_mot=soluzione}{par date}{inverse}{age < 90}><BOUCLE_verif_soluzioni(ARTICLES){id_article}{id_mot}>
	<BOUCLE_rub_soluzioni(RUBRIQUES){id_rubrique}>
	<li><b><a href="#URL_ARTICLE">#TITRE</a></b>
	</BOUCLE_rub_soluzioni>
</BOUCLE_verif_soluzioni></BOUCLE_soluzioni>
</ul>
</B_soluzioni>

<B_trucchi>
<p><b>Trucchi:</b>
<ul>
<BOUCLE_trucchi(ARTICLES){titre_mot=trucchi}{par date}{inverse}{0,5}><BOUCLE_verif_trucchi(ARTICLES){id_article}{id_mot}>	
	<BOUCLE_rub_trucchi(RUBRIQUES){id_rubrique}>
	<li><b><a href="#URL_ARTICLE">#TITRE</a></b>
	</BOUCLE_rub_trucchi>
</BOUCLE_verif_trucchi></BOUCLE_trucchi>
</ul>
</B_trucchi>

<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_gioco.php3?id_rubrique=#ID_RUBRIQUE">#TITRE</a>:</b>
	</BOUCLE_rub_news>
	#TITRE
</BOUCLE_verif_news></BOUCLE_news>
</ul>
</B_news>

Importante. Possiamo notare che il ciclo di verifica sopra indicato è "incollato" al primo ciclo (per esempio, tra <BOUCLE_anteprime(ARTICLE)...> e <BOUCLE_verif_anteprime(ARTICLE)...>, non vi sono spazi né ritorni a capo). Infatti, il testo condizionale prima del primo ciclo (qui, la dicitura "Anteprime") viene attivato se il ciclo contiene almeno un carattere. Se vi fosse uno spazio o un ritorno a capo prima della chiamata del ciclo di verifica, anche se il ciclo non mostra alcun articolo (poiché, da tre mesi, nessuno ha pubblicato articoli di questo tipo per questa piattaforma), questo spazio parassita farebbe apparire il contenuto del codice condizionale.

Analizziamo ora la visualizzazione delle prossime uscite. Possiamo decidere di creare una nuova pagina di uscite, riguardante esclusivamente la piattaforma scelta, ma in questa sede preferiamo visualizzare direttamente queste uscite sulla nostra home page specifica (le uscite non sono così numerose per ogni piattaforma). Applicando gli stessi metodi visti in precedenza sostituiamo il link "Le prossime uscite" con:

<B_uscite>
<b>Le uscite #TITRE del mese prossimo:</b>
<ul>
<BOUCLE_uscite(ARTICLES){titre_mot=Data_uscita}{par date}{age < 0}><BOUCLE_uscite_verif(ARTICLES){id_article}{id_mot}>
	<li>[(#DATE|affdate)]:
	
	<BOUCLE_rub_uscite(RUBRIQUES){id_rubrique}>
	#TITRE
	</BOUCLE_rub_uscite>
	
</BOUCLE_uscite_verif></BOUCLE_uscite>
</ul>
</B_uscite>

Seguendo lo stesso principio, visualizziamo l’elenco dei giochi preferiti per questa piattaforma negli ultimi sei mesi:

<B_voti>
<b>I nostri giochi preferiti negli ultimi 6 mesi:</b>
<ul>
<BOUCLE_voti(ARTICLES){type_mot=voto}{par titre_mot}{inverse}{age<180}><BOUCLE_voti_verif(ARTICLES){id_article}{id_mot}>
	<BOUCLE_rub_voti(RUBRIQUES){id_rubrique}>
	<li> #TITRE
	</BOUCLE_rub_voti>
	<BOUCLE_ilvoto(MOTS){id_article}{type=voto}>
	(#TITRE/10)
	</BOUCLE_ilvoto>
	
</BOUCLE_voti_verif></BOUCLE_voti>
</ul>
</B_voti>

L’unico dettaglio da notare per il momento è l’ordinamento degli articoli associati alle parole chiave di tipo "voto" secondo il criterio {par titre_mot}{inverse} (funzione apparsa nella versione 1.3 di SPIP). In effetti, le parole di tipo "voto" sono sotto forma di "01", "02"..., "10"; è dunque possibile chiedere di ordinarle in sequenza da 10 a 1.

Tuttavia, questa presentazione non ci soddisfa del tutto: noi vogliamo visualizzare i nostri "giochi preferiti", mentre qui c’è solo un ordinamento secondo il voto. Se un gioco è uscito da meno di sei mesi e si è meritato un voto minimo sarà comunque elencato tra i "giochi preferiti" (in fondo all’elenco, ma comunque presente)!

Dobbiamo trovare un sistema per visualizzare solo i giochi che si sono meritati uun voto superiore a "07" (scelta soggettiva). Se pensate di utilizzare a tal fine il ciclo BOUCLE_voti, aggiungendovi semplicemente la dicitura {titre_mot>07}, ciò non funzionerà: se il ciclo non è di tipo (MOTS), SPIP accetta un solo criterio per le parole chiave.

Dobbiamo quindi fare uso del ciclo BOUCLE_ilvoto (che mostra il voto), e chiedergli di selezionare solo i voti superiori a 7 (poiché esso è un ciclo di tipo (MOTS) possiamo dare più limiti alle parole chiave). Il ciclo BOUCLE_rub_voti, che mostra il titolo del gioco, viene posta nel testo opzionale dopo del ciclo BOUCLE_ilvoto:
-  se il voto è superiore a 7 il ciclo BOUCLE_rub_voti viene eseguito;
-  altrimenti non viene visualizzato nulla.

Attenzione: è sempre un’operazione delicata inserire un ciclo nel testo opzionale di un altro ciclo (SPIP può confondersi facilmente). Per una ragione bizzarra, ciò è possibile nel testo opzionale dopo, ma non nel testo opzionale prima.

Sapendo che noi otterremo solo gli articoli votati con "08", "09", "10", in ordine dal migliore al peggiore, consideriamo ora inutile richiamare il voto stesso. Il ciclo BOUCLE_ilvoto quindi è vuoto, esso serve solo ad attivare o a disattivare il ciclo BOUCLE_rub_voti.

Infine, poiché il ciclo BOUCLE_ilvoto diventa un nuovo "filtro" applicato alla selezione di articoli, è necessario eliminare gli spazi e i ritorni a capo intorno a questo ciclo, per evitare di attivare l’espressione "I nostri giochi preferiti" se non c’è almeno un articolo mostrato.

Pertanto, il risultato è il seguente:

<B_voti>
<b>I nostri giochi preferiti negli ultimi 6 mesi:</b>
<ul>
<BOUCLE_voti(ARTICLES){type_mot=voto}{par titre_mot}{inverse}{age<120}><BOUCLE_voti_verif(ARTICLES){id_article}{id_mot}><BOUCLE_ilvoto(MOTS){id_article}{titre>07}{type=voto}>
	</BOUCLE_ilvoto>
	<BOUCLE_rub_voti(RUBRIQUES){id_rubrique}>
	<li> <a href="#URL_RUBRIQUE">#TITRE</a>
	</BOUCLE_rub_voti>
	</B_ilvoto></BOUCLE_voti_verif></BOUCLE_voti>
</ul>
</B_voti>

tutto ciò può sembrare indigesto, ma funziona, e sempre senza nemmeno una funzione in PHP!

Ora che le home page specifiche sono quasi terminate ci rendiamo conto, passando da una all’altra, che alcune pagine sono vuote. In effetti, noi qui visualizziamo solo informazioni riguardanti gli ultimi tre mesi (per i test, le news...). Se una piattaforma non è stata trattata da nessun articolo negli ultimi tre mesi oppure se una piattaforma non ha ancora nessun articolo (anche se è prevista nell’elenco delle parole chiave è possibile che nessuno abbia scritto qualcosa sui giochi in ambiente Linux).

È quindi necessario modificare il ciclo BOUCLE_home_piatt (quello che mostra i logo delle diverse piattaforme) affinché solo le piattaforme che hanno degli articoli siano mostrate. A tal fine è sufficiente aggiungere un ciclo che verifichi la presenza di articoli datati da meno di tre mesi associati alla parola chiave. Il risultato è il seguente:

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

Dovremo effettuare la stessa modifica nella pagina "sommaire.html" della home generica (pensare di eliminare il criterio {exclus} in questo caso).

Autore Fausto Barbarito Publié le : Mis à jour : 26/10/12

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