Desitgem ordenar els articles de forma diferenciada, d’aquesta manera:
- en algunes seccions, els articles són publicats uns després dels altres; per tant, es vol presentar-los en ordre cronològic: els més recents al començament de la llista, els més antics al final de la llista;
- en altres seccions, es vol mostrar els articles en un ordre precís, per tant, numerant-los, al lloc públic, volem presentar-los segons aquest ordre indicat per la numeració.
- finalment, a les altres seccions, els articles s’han de classificar en ordre cronològic, excepte aquells que volem situar al capdamunt de la llista en un ordre precís.
Hi ha diversos mètodes per a fer aquesta classificació. Preneu bona nota que els dos mètodes que aquí us presentem són vàlids tant per a ordenar els articles com pels altres objectes d’SPIP (seccions, breus, etc.).
Mètode simple
Recorda: Per a classificar els articles segons un ordre imposat, es numera els seus títols a l’espai privat, amb un número seguit d’un punt i un espai: « 1. Primer article », « 2. Segon article », etc.
_Als esquelets, per tal que no es mostrin aquests números a l’espai públic, passem un filtre |supprimer_numero
a l’etiqueta #TITRE, i s’utilitza el criteri {par num titre}
al bucle ARTICLES per tal d’ordenar segons els números indicats.
Per classificar segons un ordre imposat I/O segons la data, escriure això (a l’interior d’un bucle RUBRIQUES):
<BOUCLE_articles(ARTICLES) {id_rubrique} {par num titre}{!par date}>
[(#TITRE|supprimer_numero)]
</BOUCLE_articles>
D’aquesta manera els articles de la secció seran primerament classificats per número, després, aquells que porten un número idèntic, es classificaran per data inversa.
Nota important: Tot això és produeix i és satisfactori sempre que, en una determinada secció, tots els articles estiguin numerats o que cap ho estigui. Per contra, si una secció conté articles no numerats, excepte un per exemple, aquest es mostrarà en darrer terme. En efecte, els articles no numerats es consideren com si tinguessin un zero per número. Per evitar aquesta classificació, es fa servir llavors el mètode que expliquem a continuació.
Mètode final
A l’interior d’un bucle RUBRIQUES, efectuarem el següent test: hi ha, a dins d’aquesta secció, al menys un article el títol del qual comença per un número seguit d’un punt?
<BOUCLE_test_numero(ARTICLES) {id_rubrique} {titre==^[0-9]+\.} {0,1}>
Hi ha un article numerat en aquesta secció
</BOUCLE_test_numero>
No hi ha cap article numerat
<//B_test_numero>
El criteri interessant aquí és: {titre==^[0-9]+\.}
Es tracta d’una selecció del títol
, segons una expressió regular («==
» indica una selecció segons una expressió regular) la sintaxi de la qual és: al començament del titre
(«^
» indica el començament de la cadena provada), hi ha un o diversos («+
» indica «al menys un dels caràcters precedents») caràcters compresos entre 0 i 9 («[0-9]
» significa «caràcters compresos entre 0 i 9 inclosos»), seguits del caràcter «punt» («\.
»).
Tingueu present, finalment, que només es selecciona un article numerat així ({0,1}
); d’aquesta manera, l’interior del bucle només serà efectuat una sola vegada. A més, n’hi ha prou que existeixi un únic article numerat per provocar la publicació d’una llista per l’ordre «numerat».
Aquest bucle mostra «Existeix un article numerat en aquesta secció.» si existeix com a mínim un article el títol del qual vagi precedit d’un número a la secció, i «No hi ha cap article numerat.» si no n’existeix cap.
N’hi ha prou ara instal·lant al lloc d’això que fèiem esment, uns bucles per mostrar els articles segons l’ordre de presentació que desitgem:
<ul>
<BOUCLE_test_numero(ARTICLES) {id_rubrique} {titre==^[0-9]+\.} {0,1}>
<BOUCLE_ordre_numeros(ARTICLES) {id_rubrique} {par num titre}>
<li>[(#TITRE|supprimer_numero)]</li>
</BOUCLE_ordre_numeros>
</BOUCLE_test_numero>
<BOUCLE_ordre_date(ARTICLES) {id_rubrique} {par date}{inverse}>
<li>#TITRE<li>
</BOUCLE_ordre_date>
<//B_test_numero>
</ul>
D’aquesta manera, els articles numerats de la secció es mostren en primer lloc, classificats per número, i seguits d’aquells que no porten número, classificats del més recent al més antic.
A partir d’SPIP 1.9, és possible fer-ho d’una manera més simple:
<BOUCLE_Classement(ARTICLES){par num titre, titre}>
<li>[(#TITRE|supprimer_numero)]</li>
</BOUCLE_Classement>
Classificarà els articles per ordre de títol i, després, per número.