Cominciamo con un file "rubrique.html" vuoto.
La prima versione del nostro file sarà molto semplice. Inseriamo subito il ciclo BOUCLE_gerarchia, che non presenta alcuna peculiarità.
<html>
<title>[#NOM_SITE_SPIP]
<BOUCLE_titolo(RUBRIQUES){id_rubrique}>#TITRE</BOUCLE_titolo></title>
</head>
<body>
<blockquote>
<BOUCLE_principale(RUBRIQUES){id_rubrique}>
<BOUCLE_gerarchia(HIERARCHIE){": "}>
<a href="#URL_RUBRIQUE">#TITRE</a>
</BOUCLE_gerarchia>
<h1>#TITRE</h1>
[(#LOGO_RUBRIQUE|right)]
[(#TEXTE|justifier)]
[<hr>(#NOTES)]
</BOUCLE_principale>
</blockquote>
</body>
</html>
Se carichiamo questa pagina sul nostro sito il risultato non sarà spettacolare...
Gli articoli contenuti in questa rubrica
Aggiungiamo l’elenco degli articoli contenuti in questa rubrica. Mettiamo questo ciclo BOUCLE_articoli alla fine del ciclo BOUCLE_principale (dopo il testo e le note).
...
<B_articoli>Gli articoli:
<ul>
<BOUCLE_articoli(ARTICLES){id_rubrique}>
<li> <a href="#URL_ARTICLE">#TITRE</a>
</BOUCLE_articoli>
</ul>
</B_articoli>
</BOUCLE_principale>
...
In realtà, questo ciclo non è molto utile: esso mostra gli articoli senza un ordine particolare (e non tiene conto delle parole chiave del tipo di articolo). Per il momento lo inseriamo così com’è, al fine di avere una prima navigazione possibile sul sito. Riprendiamo questa parte più avanti nel tutorial.
Le sotto-rubriche
Inseriamo ora il ciclo delle sotto-rubriche (dopo BOUCLE_articoli):
...
<B_sotto_rubriche>Le sotto-rubriche:
<ul>
<BOUCLE_sotto_rubriche(RUBRIQUES){id_parent}{par titre}>
<li> <a href="">#TITRE</a>
</BOUCLE_sotto_rubriche>
</ul>
<B_sotto_rubriche>
</BOUCLE_principale>
...
Ecco, qui ci troviamo di fronte al primo vero problema del nostro tutorial: le rubriche che definiscono i tipi di gioco sono mischiate con quelle dedicate direttamente ai giochi.
Per esempio, nella struttura dimostrativa la rubrica "Azione/avventura" contiene contemporaneamente, presentate esattamente nella stessa maniera:
- due sotto-rubriche tematiche ("Esplorazione e enigmi" e "Survival horror"),
- e due rubriche di gioco ("Devil May Cry" e "Soul Reaver 2").
Il ciclo suesposto fornisce quindi la visualizzazione di questo elenco:
- Devil May Cry,
- Esplorazione e enigmi,
- Soul Reaver 2,
- Survival horror.
Pertanto è imperativo differenziare nettamente le rubriche "categorie di giochi" (utili essenzialmente alla navigazione) dalle rubriche "giochi" (che danno il titolo del gioco).
Per risolvere questo problema utilizziamo il sistema dei cicli. Nessun trucco informatico, quindi, ma bisogna comprendere bene la logica del sito e la logica dei cicli.
La logica del sito: una rubrica "Gioco" è una rubrica che contiene articoli; una rubrica "categoria di giochi" non contiene articoli. È la definizione del nostro sito: qualsiasi articolo riguardante un gioco viene posto in una rubrica chiamata col nome del gioco; in tal modo una rubrica di categoria di gioco contiene unicamente sotto-rubriche di categorie e di rubriche con il nome dei giochi, ma mai direttamente degli articoli (è chiaro?). Per esempio, nel nostro caso:
- "Soul Reaver 2" e "Devil May Cry" contengono gli articoli riguardanti questi giochi (test, anteprime, ecc.);
- "Survival horror" e "Esplorazione e enigmi" per definizione non contengono articoli. Se vi sono dei giochi dentro "Survival horror" gli articoli corrispondenti sono all’interno di sotto-rubriche nominate con il titolo dei giochi, ma non direttamente nella rubrica "Survival...".
Lo scopo della procedura è quindi di separare le rubriche senza articoli dalle rubriche con articoli. E la maniera più semplice è ricorrere a due cicli diversi.
Le rubriche senza articoli
Cominciamo dalle sotto-rubriche che non contengono articoli (cioè, le categorie principali del tipo "Survival horror", "Esplorazione"...). Modifichiamo il ciclo BOUCLE_sotto_rubriche come segue:
<BOUCLE_sotto_rubriche(RUBRIQUES){id_parent}{par titre}>
<BOUCLE_senza_articoli(ARTICLES){id_rubrique}>
</BOUCLE_senza_articoli>
<h3><a href="#URL_RUBRIQUE">#TITRE</a></h3>
<//B_senza_articoli>
</BOUCLE_sotto_rubriche>
Il principio di questo trucco è semplice:
- all’interno di BOUCLE_sotto_rubriche si inserisce un nuovo ciclo, BOUCLE_senza_articoli, che recupera gli articoli che esso contiene. È importante notare che l’interno del ciclo BOUCLE_senza_articoli è vuoto: se la sotto-rubrica contiene articoli questi ultimi non vengono visualizzati (il ciclo serve solo a controllare la presenza di articoli o meno);
- il segnaposto #TITRE del ciclo BOUCLE_sotto_rubriche viene inserito nel testo opzionale "senza" del ciclo BOUCLE_senza_articoli. Appena prima di <//B_senza_articoli>
. In tal modo, il titolo della rubrica appare solo se BOUCLE_senza_articoli non contiene alcun articolo (ovvero, se lo stesso ciclo BOUCLE_sotto_rubriche non contiene alcun articolo).
Il ciclo BOUCLE_sotto_rubriche, in senso assoluto, recupera tutte le rubriche (comprese quelle dei giochi). Tuttavia, il segnaposto #TITRE (con il link) viene visualizzato solo se BOUCLE_senza_articoli è vuoto.
Le rubriche dei giochi (con gli articoli)
Ora applichiamo il principio esattamente inverso a un ciclo BOUCLE_giochi (che possiamo inserire appena prima di BOUCLE_sotto_rubriche).
<BOUCLE_giochi(RUBRIQUES){id_parent}{par titre}>
<B_con_articoli>
<h4><a href="#URL_RUBRIQUE">#TITRE</a></h4>
[(#LOGO_RUBRIQUE|right)]
<ul>
<BOUCLE_con_articoli(ARTICLES){id_rubrique}>
<li><a href="#URL_ARTICLE">#TITRE</a>
</BOUCLE_con_articoli>
</ul>
</B_con_articoli>
</BOUCLE_giochi>
Questa volta, il segnaposto #TITRE della rubrica è messo nel testo condizionale "prima"; si visualizza il #LOGO_RUBRIQUE (evidentemente, a breve, si dovranno fare delle tabelle per evitare sovrapposizioni disastrose). E, durante il passaggio, ne approfittiamo per visualizzare l’elenco degli articoli del ciclo BOUCLE_con_articoli.
Il ciclo BOUCLE_giochi e quello BOUCLE_sotto_rubriche sono inizialmente completamente identici: i loro criteri sono gli stessi. All’interno di questi cicli sono le stesse rubriche che vengono analizzate. Di contro, i cicli BOUCLE_con_articoli e BOUCLE_senza_articoli hanno funzione di "filtro": prendono ognuna delle rubriche di BOUCLE_giochi e BOUCLE_sotto_rubriche, e verificano se vi sono articoli presenti.
In questo caso avremmo potuto utilizzare il criterio {doublons}
? No, perché il primo ciclo visualizzato (BOUCLE_sotto_rubriche) analizza tutte le sotto-rubriche (solo che il titolo di esse viene mostrato oppure no a seconda dei casi). Attribuirgli un criterio {doublons}
impedirebbe di manipolare in seguito le sotto-rubriche. Poi, il ciclo BOUCLE_giochi associato a questo criterio {doublons}
cercherebbe di recuperare tutte le sotto-rubriche che non sono state manipolate dal primo ciclo; ma tutte le sotto-rubriche sono state già trattate. Il ciclo BOUCLE_giochi, quindi, non potrebbe visualizzare nulla.
Per il momento lasciamo questa pagina "rubrique.html". Ci torneremo più tardi.