Ora il nostro sito utilizza quel che avevamo previsto all’inizio:
- la suddivisione tematica delle rubriche (per genere di gioco);
- l’indicazione delle piattaforme valide per ogni articolo;
- la gestione dei tipi di articolo (test, news, anteprime...).
La fase successiva è creare delle navigazioni parallele (navigare seguendo una piattaforma unica oppure secondo un tipo di articolo).
Ma prima di lanciarci nello sviluppo di queste navigazioni trasversali complichiamo un po’ le cose aggiungendo altri due elementi indispensabili ai siti che trattano di videogiochi:
- il voto attribuito a un gioco;
- la data di uscita ufficiale del gioco.
Ormai dovrebbe essere facile implementare questi due elementi usando il sistema delle parole chiave. Essi permetteranno di proporre navigazioni trasversali (in particolare una pagina dei giochi che hanno i voti migliori e una pagina di annuncio delle prossime uscite).
L’attribuzione di un voto a un gioco
È logico attribuire un voto al termine di un test:
- per le anteprime è troppo presto, perché non sono una versione definitiva; per gli altri tipi di articolo (news, soluzioni...), ciò non serve a nulla;
- è impossibile attribuire un voto alla rubrica-gioco, poiché questa rubrica può presentare versioni diverse di un medesimo gioco.
Quindi, decidiamo che, nel funzionamento del nostro sito, il voto è legato a un articolo di test. In una stessa rubrica di un gioco, poiché ci possono essere più test diversi (secondo i critici, secondo le piattaforme...), ci saranno più voti associati a questi test.
Arbitrariamente, scegliamo una scala da 1 a 10 (1 per orrendo, 10 per fantastico).
Ritorniamo alla pagina di gestione delle parole chiave:
- creiamo un gruppo di parole chiave chiamato "Voto";
- in questo gruppo creiamo 10 parole chiave i cui nomi sono, in sequenza, "01", "02", ..., "09", "10". Con ciò otteniamo:
Si può scegliere, come per le piattaforme, di attribuire un logo diverso ad ogni voto (per esempio delle stelle), e poi utilizzare nei modelli i logo invece che il numero indicato dalla parola chiave in lettere. Per mera pigrizia noi ci accontenteremo di utilizzare il testo delle parole chiave.
Ora, prima di pubblicare un test, oltre a selezionare le parole chiave corrispondenti al tipo dell’articolo ("Test", quindi) e alle piattaforme interessate, è necessario pensare a dare un voto. Se si desidera che il funzionamento sia coerente è evidente che non dobbiamo selezionare più di un voto per singolo articolo.
Integrare il voto nei modelli
Il ciclo che permette di visualizzare il voto di un articolo è molto semplice.
- In "article.html", inseriamo il voto dell’articolo sotto la firma dell’autore (prima di #PS e #NOTES):
<BOUCLE_voto(MOTS){id_article}{inverse}{type=Voto}>
[<p align="right"><b>VOTO: (#TITRE)/10</b>]
</BOUCLE_voto>
Aggiungiamo anche la dicitura del voto negli "altri test di questo gioco". Il ciclo BOUCLE_test viene quindi modificato come segue:
<B_test><p>I test di questo gioco:
<ul>
<BOUCLE_test(ARTICLES){id_rubrique}{titre_mot=Test}>
<li>
<BOUCLE_test_piattaforme(MOTS){id_article}{type=Piattaforme}>
[(#LOGO_MOT)]
</BOUCLE_test_piattaforme>
<a href="#URL_ARTICLE">#TITRE</a>
<BOUCLE_altro_voto(MOTS){id_article}{inverse}{type=Voto}>
[ - VOTO: (#TITRE)/10]
</BOUCLE_altro_voto>
- [(#DATE|affdate)]
</BOUCLE_test>
</ul>
</B_test>
- All’interno di "rubrique.html", si deve sostituire direttamente questo stesso ciclo BOUCLE_test.
Ecco fatto, l’integrazione di un voto di test ha preso solo cinque minuti! È stato tutto troppo facile, e più tardi vedremo come sfruttare ancora questo voto attribuito ai giochi.
La data di uscita ufficiale dei giochi
La visualizzazione della data di uscita ufficiale dei giorni è più problematica. In effetti, una data non può essere una parola chiave (abbiamo già sottolineato che le parole chiave devono essere elementi stabili della struttura: non si creeranno quindi parole chiave con le date!).
Vi è però una possibilità: utilizzare la data di prima pubblicazione di alcuni articoli. Problema: quali articoli?
- Le date di uscita si sanno (con maggiore o minore approssimazione) con largo anticipo, pertanto non si può attendere che ci siano articoli dedicati al gioco per poterlo annunciare.
- Gli articoli di un giorno possono trattare di una singola piattaforma o di molte. Ora, le date di uscita possono variare a seconda della piattaforma. Quindi, per annunciare le date è difficile usare gli articoli comuni a più piattaforme. Per esempio, Alone in the Dark: the new nightmare, è molto simile tra le sue versioni Playstation 2 e Dreamcast, pertanto è logico dedicare un test unico a queste due versioni; al contrario, le date di uscita per queste due piattaforme sono differenti.
- Finché il gioco non viene commercializzato, le date annunciate devono essere corrette molto spesso (ritardi, maggiore precisione...). Il webmaster deve poter reperire facilmente queste informazioni per modificarle.
Nella struttura del nostro sito possiamo considerare che la data di uscita di un gioco sia una informazione indipendente dalle altre informazioni (test, anteprime, ecc.); non possiamo utilizzare la "data di prima pubblicazione" di un altro articolo per indicare questa data di uscita. Procederemo, quindi, nella maniera seguente (ma ve ne sono anche altre possibili):
- creiamo un nuovo tipo di articolo (in aggiunta a test, anteprime, ecc.); inserito nel gruppo "Tipo_articolo", lo chiameremo "Data_uscita";
- nella rubrica del gioco creiamo tanti articoli quanti sono necessari per coprire tutte le versioni del gioco con date di uscita diverse. Questi articoli sono vuoti: essi hanno solamente un titolo e una data di "pubblicazione" (indicata manualmente e corrispondente alla data di uscita del gioco). Il titolo non ha alcuna importanza, esso non viene mostrato sul sito pubblico; al contrario, questo titolo faciliterà la navigazione nell’area riservata;
- ad ogni articolo associato a "Data_uscita", attribuiamo anche la parola chiave della piattaforma a cui si applica questa data.
Questo è un esempio di come procedere con Resident Evil: Codice Veronica:
- creare un nuovo articolo nella rubrica "Codice Veronica";
- intitolare questo articolo "Uscita Veronica Dreamcast" (titolo di convenienza, con l’unico scopo di identificare questi articoli nell’area riservata);
- attribuire le parole chiave "Dreamcast" e "Data_uscita" a questo articolo;
- "pubblicare" l’articolo, e modificarne la data con "maggio 2000" (se non si conosce il giorno esatto si può selezionare "n.c." nel menu a tendina del giorno);
- ripetere l’operazione con un nuovo articolo "Uscita Veronica PS2";
- attribuire le parole chiave "Playstation 2" e "Data_uscita";
- pubblicare e modificare la data (13 settembre 2001).
Per il primo articolo otteniamo:
L’autore di questi articoli non ha la minima importanza (è inutile perdere tempo a eliminarlo, non verrà comunque utilizzato mai più).
Notate l’utilità del nostro modo di visualizzare gli articoli di una rubrica in funzione di alcuni tipi di articoli (test, anteprime...): gli articoli che hanno come parola chiave "Data_uscita" non sono mostrati (con i modelli standard di SPIP questi "articoli", anche se vuoti, sarebbero visualizzati al pari degli altri).
Visualizzare la data negli articoli
Quando ci si trova in un articolo (di un gioco), la o le date di uscita sono contenute negli articoli associati alla parola chiave "Data_uscita", situati nella medesima rubrica. Per conoscere la data di uscita di un gioco a partire da un articolo di test (per esempio), è quindi necessario recuperare il o gli articoli inseriti nella stessa rubrica che abbiano come parola chiave "Data_uscita".
Nel modello "article.html" inseriamo (per esempio appena dopo il titolo):
<BOUCLE_uscita(ARTICLES){id_rubrique}{titre_mot=Data_uscita}>
<li> #TITRE :
[<b>(#DATE|affdate)</b>]
</BOUCLE_uscita>
Tuttavia, avevamo deciso di non utilizzare il titolo dell’articolo che contiene la data. Desideriamo, in effetti, unificare la presentazione di questa informazione senza essere obbligati a estrarre il titolo sempre nella stessa maniera. Pertanto, non visualizzeremo il #TITRE di questo finto articolo (nemmeno il titolo della rubrica, conosciamo già il titolo del gioco, inutile ricordarlo qui). Al contrario, per differenziare (eventualmente) le diverse date di uscita a seconda delle piattaforme inseriamo:
<BOUCLE_uscita(ARTICLES){id_rubrique}{titre_mot=Data_uscita}>
<li> Data di uscita
<BOUCLE_piattaforma_uscita(MOTS){id_article}{type=Piattaforme}{", "}>#TITRE</BOUCLE_piattaforma_uscita>:
[<b>(#DATE|affdate)</b>]
</BOUCLE_uscita>
Durante la visita esso visualizzerà:
- Data di uscita Playstation: 22 agosto 2001
- Data di uscita Dreamcast: maggio 2001
Per noi questo non è ancora soddisfacente (è un tutorial, abbiamo il diritto di essere esigenti!): il ciclo BOUCLE_uscita visualizza le date di uscita per tutte le piattaforme; ora, può darsi che il nostro articolo non tratti di tutte le piattaforme. Vogliamo quindi mostrare solo le date di uscita che corrispondono alle piattaforme indicate nell’articolo.
Attenzione, la cosa diventa ardua, e faremo uso di una finezza dei cicli:
<BOUCLE_piatt2(MOTS){id_article}{type=Piattaforme}>
<BOUCLE_uscita(ARTICLES){id_rubrique}{titre_mot=Data_uscita}>
<BOUCLE_verifica_parola(ARTICLES){id_article}{id_mot}>
<li> Data di uscita
<BOUCLE_piattaforma_uscita(MOTS){id_article}{type=Piattaforme}{", "}>#TITRE</BOUCLE_piattaforma_uscita>:
[<b>(#DATE|affdate)</b>]
</BOUCLE_verifica_parola>
</BOUCLE_uscita>
</BOUCLE_piatt2>
Potete riconoscere i cicli BOUCLE_uscita e BOUCLE_piattaforma_uscita, che non abbiamo modificato. Al contrario, abbiamo aggiunto due cicli.
(1) L’insieme è inserito all’interno di un ciclo BOUCLE_piatt2, che estrae le parole chiave delle piattaforme associate all’articolo attuale. All’interno di questo ciclo, abbiamo quindi un certo valore per "id_mot" (l’identificativo di ogni piattaforma a cui l’articolo si rivolge).
(2) Il ciclo BOUCLE_uscita, inalterato, estrae tutti gli articoli della rubrica associata alla parola chiave "Data_uscita". Nota bene: questo ciclo non utilizza "id_mot", quindi gli articoli di questo ciclo sono sia cicli associati che non associati alla parola chiave di "id_mot". Secondo punto importante, è un ciclo (ARTICLES), questo ciclo non rinvia nessuna informazione sulle parole chiave; pertanto il valore "id_mot" fournito dal ciclo BOUCLE_piatt2 rimane invariato all’interno di questo ciclo.
(3) Il ciclo BOUCLE_verifica_parola è un trucco interessante: è un ciclo (ARTICLES) che seleziona l’articolo il cui identificativo è "id_article"; ora, noi siamo già nel ciclo BOUCLE_uscita, che ha già estratto un articolo. Quindi il ciclo BOUCLE_verifica_parola ha esattamente lo stesso risultato del ciclo precedente! Con la differenza che il ciclo BOUCLE_verifica_parola aggiunge un criterio supplementare, {id_mot}
, l’articolo quindi deve essere associato alla parola chiave "id_mot". Risultato: se l’articolo ottenuto con BOUCLE_uscita è associato alla parola chiave "id_mot" si continua; se, invece, l’articolo di BOUCLE_uscita non è associato alla parola chiave ci si ferma e si passa al successivo.
- Si può quindi dire che il ciclo BOUCLE_verifica_parola agisce da filtro: prende l’articolo e verifica se corrisponde al criterio della parola chiave.
- Si può dire altrimenti: BOUCLE_verifica_parola è solo un criterio di selezione supplementare per il ciclo BOUCLE_uscita. In effetti, sarebbe stato molto più semplice non utilizzare affatto il ciclo BOUCLE_verifica_parola, ma aggiungere un criterio a BOUCLE_uscita, nella maniera seguente:
<BOUCLE_uscita(ARTICLES){id_rubrique}{id_mot}{titre_mot=Data_uscita}>
Cioè: richiamare gli articoli della stessa rubrica associati alla piattaforma "id_mot" e alla parola chiave "Data_uscita". Questo metodo sarebbe stato più diretto, sfortunatamente SPIP non accetta questo tipo di sintassi (ci vuole un solo criterio che indica le parole chiave in un ciclo). Un ciclo del genere viene quindi rifiutato da SPIP.
Noterete che abbiamo messo in fila quattro cicli successivi per visualizzare un’informazione poco importante come la data di uscita di un gioco! Può essere biasimevole, ma si può anche pensare che, se si comprende a fondo la logica dei cicli, le possibilità di SPIP sono molto più estese di ciò che i modelli standard lasciano supporre.
N.B. Utilizzando un po’ di codice PHP molto semplice si sarebbe ottenuto lo stesso risultato con un solo ciclo. Nello sviluppo di un sito si avrà sicuramente un vantaggio a guadagnare tempo preferendo la versione abbreviata usando un po’ di PHP. Tuttavia, noi vogliamo dimostrare che alcuni risultati possono essere ottenuti facendo benissimo a meno del PHP.