De moment, el nostre lloc Web no autoritza participar a aquells que el visiten. Ara bé, aquest tipus de lloc es presta molt bé als fòrums oberts als visitants:
- primer perquè sobre aquest tipus de matèria, els usuaris als agrada donar el seu punt de vista; els fòrum de jocs de vídeo són molt abundants...
- perquè és un element indispensable al contingut editorial del lloc Web: és impossible de preveure a l’avançada totes les preguntes que facin referència a un joc (trucs, astúcies, blocat a tal nivell, com reconfigurar la carta gràfica RadeTI 2525 del seu PC...); els fòrums són l’indret indispensable per aquest tipus de preguntes/respostes.
Abans d’integrar els fòrums al nostre lloc Web, haurem de definir primer on i com integrar-los.
- Primera pregunta: on?
Amb els esquelets proporcionats en estàndard amb SPIP, hem agafat el costum d’instal·lar els fòrums directament a sota de cada article. Però, aquí, la nostra estructura editorial és totalment diferent: tots els articles relacionats amb un joc estan reagrupats en una secció. Certament, podríem continuar instal·lant els fòrums a sota de cada article, però això seria poc eficaç: certament, més que una reacció a un article precís, el visitant voldrà discutir sobre el joc «en general».
Decidim (un cop més una tria editorial arbitrària!) que els fòrums no es relacionaran amb cada article (cada prova, cada visualització prèvia, etc.), sinó amb el joc en el seu conjunt. És a dir, la secció del joc. En cada article, farem un enllaç cap a una pàgina comú que visualitzi el fòrum de la secció.
- Segona pregunta: com?
La presentació del fòrum és important: cal mostrar-ho tot de cop (sempre és molt més pràctic), o bé mostrar primer una llista dels títols dels missatges, i una pàgina específica per a cada missatge.
En un lloc Web sobre jocs de vídeo, podem preveure fòrum molt actius, amb nombrosos missatges, alguns molt llargs (alguns visitants pot ser que enviïn la crítica sencera d’un joc, una solució interminable...). I aleshores és impossible mostrar tot el contingut de tots els missatges en només una pàgina.
Per tant, escollim presentar primer la llista de missatges, amb únicament el seu títol; després farem una segona pàgina que mostri cada missatge específic.
La pàgina forum_jeu.php3
La pàgina que mostrarà la llista completa dels missatges d’un fòrum serà, per tant, la pàgina «forum_jeu.php3». Aquesta pàgina es crida amb un número de secció (donat que és la secció la que conté tots els articles del joc).
Comencem per integrar l’enllaç cap aquesta pàgina en la navegació del nostre lloc Web.
A la pàgina «article.html», afegim l’enllaç cap al fòrum del joc. Inserim (per exemple, després de la presentació de #NOTES):
Acontentem-nos de moment amb aquest enllaç de navegació. Efectivament, per fer una presentació més completa (especialment número de missatges), tenim necessitat de crear missatges de fòrum per tal de provar la nostra interfície, i, de moment, aquests fòrums estan completament buits.
Creem, per tant, el nostre esquelet dels fòrums...
Comencem, com sempre, pel fitxer que crida: «forum_jeu.php3»:
L’esquelet forum_jeu.html
Ara hem de crear el fitxer «forum_jeu.html». De moment molt simple:
Aquest primer esquelet, molt simple, mostra:
- el retorn a la pàgina d’inici del lloc Web;
- la jerarquia resultant d’aquest joc;
- el títol del joc.
Gràcies al BOUCLE_principale, ens trobem dins la secció que es refereix a aquest joc.
De moment, el nostre fòrum està buit completament. Abans de crear la presentació prevista (mostrar únicament la llista de missatges), hem de crear una interfície que permeti crear un fòrum complet. Gràcies a això, podrem «alimentar» el nostre fòrum, i també crear, a continuació, la interfície.
Inserim l’enllaç que ens permetrà enviar el nostre primer missatge:
Automàticament, #PARAMETRES_FORUM indicarà que es tracta de missatges lligats a una secció, ja que el nostre BOUCLE_principale és del tipus (RUBRIQUES).
Mostrem el títol d’aquests primers missatges:
Afegim la possibilitat de respondre a aquests missatges:
D’aquesta manera, podem respondre als missatges de «primer» nivell (el que anomenem els «threads» (cadenes), és a dir els missatges que generen una nova discussió), però no els mostrarem.
Mostrem les respostes:
A partir d’ara mostrem les respostes a les cadenes (threads), és possible respondre a aquestes respostes, però sense publicar. Per mostrar aquestes respostes, haurem d’afegir un bucle recursiu, és a dir que el BOUCLE_reponses es cridarà ell mateix, cosa que ens permetrà mostrar de cop la totalitat d’aquests missatges.
Modifiquem el BOUCLE_reponses d’aquesta manera:
Hem afegit a l’interior del BOUCLE_reponses un BOUCLE_rep_messages, que crida al BOUCLE_reponses. Això permet mostrar les respostes als missatges del BOUCLE_reponses, de forma recursiva (s’executa aquest bucle fins que ja no hi ha cap resposta).
Arribats a aquest punt, per les necessitats del nostre desenvolupament, hem de fer una pausa i dedicar una mica de temps a crear nombrosos missatges en un fòrum, amb diverses cadenes de discussió (threads), respostes a respostes... per simular un fòrum complet. Això ens permetrà crear de forma més lògica la nostra interfície gràfica.
Tornem a començar...
Després d’aquesta etapa, durant la qual hem alimentat el nostre fòrum amb una bona colla de missatges, tornarem a començar la nostra configuració de la pàgina, aquesta vegada sota l’òptica del que havíem previst d’entrada: la pàgina «forum_jeu» només mostrarà els títols dels missatges, i una altra pàgina mostrarà cadascun del missatges.
Com que els nostres bucles anteriors no mostraven informacions, les modificacions a fer són poc importants:
- s’ha de mostrar el #TITRE, amb enllaç cap a la pàgina d’aquest missatge (decidim que farem servir una pàgina anomenada «message.php3» per això);
- s’ha de mostrar el #NOM de l’autor del missatge, i la #DATE d’enviament del missatge;
- s’ha de suprimir la menció «respondre a aquest missatge».
Aprofitem per modificar la presentació gràfica. Els <ul> i <li> són suficients per presentar l’estructura lògica, però gràficament això no queda gens bé. Els substituirem, per tant, per alguns fulls d’estil molt simples.
Finalment, el nostre codi esdevé:
Comentari sobre els estils. Hem inserit aquí els estils directament a l’interior de la declaració dels <div>. Es pot preferir reagrupar-los en fulls d’estil a l’inici del fitxer. No obstant, durant el desenvolupament de la pàgina, és sempre pràctic poder modificar-los directament a l’indret on es troba la informació. D’altra banda, l’ús dels estils suposa algunes dificultats de compatibilitat amb Netscape 4.7: no solament aquest no fa servir la totalitat dels estils, sinó que a més algun estils provoquen errors de presentació. En l’exemple de més amunt, hem escollit estils que no provoquen aquests errors.
La nostra pàgina de presentació de tots els missatges d’un fòrum s’ha acabat. En el marc d’un veritable lloc Web, hi guanyaríem si es mostrés a més els enllaços cap als articles d’aquesta secció (les proves, les visualitzacions prèvies, un recordatori de les dates de sortida); com que això ja ha estat fet a una altra banda, deixem aquesta preocupació al lector.
Mostrar cada missatge: message.php/message.html
D’ara en endavant ens cal mostrar el text de cada missatge, amb la possibilitat de respondre’l. Com que ja hem creat els enllaços a la pàgina anterior, sabem que això es fa amb una parella de fitxers: «message.php3» i «message.html», que són cridats per un «id_forum» (id_forum és el número de cada missatge del fòrum).
El fitxer «message.php3»:
El fitxer «message.html» conté l’esquelet:
Aquesta primera versió mostra:
- el títol de la pàgina (a <title>...</title>);
- l’enllaç cap a la pàgina d’inici del lloc Web;
- el títol, el text, la data, l’autor, i un lloc Web d’aquest missatge.
Pel que fa a la navegació dins del lloc Web, queda tot per fer... Anem ara a mostrar la menció del joc al que fa referència aquest missatge. En el BOUCLE_principale, just abans del #TITRE del missatge, afegim la indicació del títol del joc (amb un enllaç cap a la secció del joc) i un enllaç cap a la pàgina que mostra tots els missatges:
Tornem a copiar el nostra tradicional BOUCLE_hierarchie que ens permet indicar la jerarquia dels estils de joc:
Ara desitjarem mostrar la jerarquia dels missatges que porten fins al nostre missatge (si es tracta d’una resposta a un altre missatge, volem mostrar l’enllaç cap a aquest missatge «pare»). Inserim (després de l’enllaç «mostrar tots els missatges», i abans del #TITRE del missatge actual):
Nota: el criteri {id_enfant} aplicat als bucles (FORUMS) ha estat introduït en la versió 1.3 de SPIP. Aquest criteri permet cridar el missatge al que respon el missatge actual. (Un criteri similar existeix pels bucles (RUBRIQUES), nosaltres l’utilitzem a més a «article.html» per «pujar un nivell» en la jerarquia de les seccions. Curiosament, ens havíem oblidat d’aquest criteri en els bucles dels fòrums...)
Aquí nosaltres mostrem el missatge al que el missatge del BOUCLE_principale respon. Però amb això no en tenim prou, nosaltres volem mostrar tota la successió dels missatges fins al missatge principal (si el missatge mostrat gràcies al BOUCLE_parents és ell mateix una resposta, volem encara pujar un nivell, i així successivament fins al primer missatge de la cadena thread).
Per això utilitzem simplement un bucle recursiu, com ho hem fet ja amb el BOUCLE_reponses del «forum_jeu.html». Invertim ara la lògica, donat que en lloc de «baixar» la jerarquia dels missatges, la «pugem». Per tal que la presentació sigui coherent, situem la crida del bucle recursiu abans de la presentació del #TITRE del missatge (els missatges «pares» s’han de mostrar abans del títol de la seva resposta):
Aquest bucle és suficient per mostrar la navegació i l’estructura lògica en els missatges. No obstant, gràficament això no ens convé. Efectivament, per marcar adequadament el fet que es tracta d’un encadenament de respostes successives, volem restablir el petit espai cap a la dreta a cada resposta (com a la pàgina «forum_jeu.html»).
Per tant, utilitzarem un estil que provoqui, a cada crida del bucle recursiu, un espai cap a l’esquerre (de 15 punts, ja que és l’espai utilitzat a la pàgina «forum_jeu.html»). Ho aprofitem per mostrar el #TITRE del missatge seguint el mateix estil que en aquesta pàgina (a la vora a l’esquerre i a baix):
La presentació esdevé més coherent, amb el desplaçament cap a l’esquerre i cap a la vora, però això encara no és perfecte: aquest desplaçament va cap al marge esquerre de la pàgina, ja que es desplaça cap a l’esquerre, sense abans haver desplaçat el conjunt de la pàgina cap a la dreta (si es considera un valor de marge, podem considerar així que el marge esquerre esdevé «negatiu»: partim d’un marge igual a 0, després -15, després -30...).
Per tant hem de desplaçar el conjunt cap a la dreta. No ho podem fer a l’interior del BOUCLE_parents, ja que desplaçaríem, a cada recursivitat, una cop cap a l’esquerre i, immediatament, un cop cap a la dreta; els desplaçaments s’anul·larien cada cop.
Hem de crear, per tant, un nou bucle, abans del bucle de presentació dels pares, que tindrà com a únic objectiu mostrar els <div> destinats a provocar la presentació cap a la dreta.
El conjunt de la pàgina serà desplaçat cap a la dreta (si hi ha tres missatges abans d’arribar al missatge principal, tot serà desplaçat 45 punts cap a la dreta). Els missatges pares partiran doncs d’aquest valor per desplaçar-se cap a l’esquerre: el primer missatge serà desplaçat cap a l’esquerre, amb un marge global de 30 punts cap a la dreta (45 - 15), el segon estarà a 15 punts, després 0 punts.
El nostre codi esdevé:
El BOUCLE_decaler_droite és encara un bucle recursiu, similar al que estava destinat a mostrar els missatges pares. La diferència la trobem aquí en el contingut: a cada missatge pare, en lloc de mostrar el títol del missatge, es mostra únicament un <div> que provoca el desplaçament cap a la dreta.
Com que hem provocat un desplaçament cap a la dreta, a continuació cal fer l’operació inversa tancant tots aquests <div...>. Això es fa pel mateix bucle però que contingui aquesta vegada les etiquetes </div>. Però on hem de situar aquest bucle? Ens sembla lògic mostrar el text del missatge principal amb un desplaçament cap a la dreta: d’aquesta manera apareixerà molt clar com una resposta al darrer missatge presentat pel BOUCLE_parents.
Per tant és just després del #TEXTE del missatge principal que hem de situar el codi següent:
Ara, volem mostrar les respostes al missatge principal. D’aquesta manera, podrem no solament «tornar a pujar» la jerarquia (amb el BOUCLE_parents), sinó també «baixar-la».
Per això, en tindrem prou en tornar a copiar el BOUCLE_reponses recursiu de la pàgina «forum_jeu.html». Inserim aquest codi just després del #TEXTE del missatge principal, i abans del desplaçament cap a l’esquerre (és lògic que aquestes respostes estiguin desplaçades cap a la dreta del missatge principal):
Finalment, només ens queda mostrar les respostes situades al «mateix nivell» jeràrquic que el missatge principal (és a dir: si el nostre missatge principal és una resposta cap a les altres respostes a aquest missatge).
Mostrem totes les respostes, inserint aquest codi just abans del #TITRE del nostre missatge principal:
Amb el desplaçament que hem creat anteriorment, tot això té un efecte ben bonic...
Millorem encara la nostra presentació: mostrarem a sota del missatge principal només els missatges enviats abans d’aquest missatge. Per això, afegim un criteri al nostre BOUCLE_niveau:
El criteri {age_relatif} (aparegut a SPIP 1.3) és similar al criteri habitual {age}. Però, allà on {age} compara la data de l’element (article, missatge de fòrum, etc.) a la data actual (avui), {age_relatif} compara aquesta data amb la data de l’element actual: en el nostre cas, com que ens trobem en el BOUCLE_principale que mostra el missatge principal, seleccionem els altres missatges comparant la seva data amb la del missatge principal. Amb {age_relatif>0}, recuperem doncs únicament els missatges més antics que el missatge principal.
Lògicament, creem un bucle amb el criteri {age_relatif>} oposat, després dels missatges dels BOUCLE_reponses.
Només ens queda tornar a treballar una mica més la presentació del missatge principal (el situem a ell també a l’interior d’una vora negre), i afegir l’enllaç «Respondre a aquest missatge»:

Els dos esquelets que permeten gestionar els fòrums d’un joc estan acabats. Tot plegat pot semblar una mica complicat, però hem de considerar que hem decidit completar la presentació de l’estructura. Hauríem pogut acontentar-nos amb una interfície de navegació molt més austera.
Els enllaços des de les altres pàgines
Recuperem el referenciament d’aquest fòrum en les altres pàgines del lloc Web.
A la pàgina «article.html», modifiquem el nostre enllaç i hi afegim un bucle:
El BOUCLE_forum no mostra res, només utilitzarem el text condicional després. El criteri {plat} d’aquest bucle de fòrum indica que volem recuperar tots els missatges del fòrum (sense aquest criteri, només recuperaríem les cadenes (threads); aquí recuperem també els missatges que són respostes a altres missatges). En aquest bucle que hem fet (que no mostra res), hi podem presentar en text opcional el número total de resultats, gràcies al #TOTAL_BOUCLE, és a dir el número de missatges en el fòrum.
A «rubrique.html», això esdevé una mica més complicat. En efecte, de la mateixa manera que havíem establert una diferència de presentació entre les seccions de navegació (per grans categories de joc) i les seccions de joc (que contenen els articles), no volem mostrar un enllaç cap a un fòrum de discussió que ens porti cap a la secció d’un joc. Per això, hem de crear un bucle que verificarà la presència com a mínim d’un article a la secció, i el nostre enllaç cap el fòrum només es mostrarà quan aquest bucle (BOUCLE_test_jeu) contingui com a mínim un element. El que ens dóna, inserit després del BOUCLE_sites i just abans que s’acabi el BOUCLE_les_articles:
Suprimim aquí la presentació del número de missatges: estem a l’interior del text opcional del BOUCLE_test_jeu, i la inserció d’un nou bucle en aquest indret és sempre desaconsellat (particularment, el valor #TOTAL_BOUCLE seria el del BOUCLE_test_jeu, i no el del número de missatges al fòrum).
Evidentment, es pot completar aquest procés afegint aquests enllaços cap els fòrums d’altres pàgines. Per exemple, el taulell d’anuncis de les sortides dels jocs.

SPIP 1.9.2