Mostrar elements per línies a una taula

Podem voler crear una taula que contingui els títols dels articles d’una secció, el número de línies que depenent del número total d’articles; per començar:

article 1 article 2 article 3
article 4 article 5 article 6
article 7 article 8 article 9

Òbviament cal utilitzar un bucle Articles, però la dificultat es troba en l’emplaçament de les etiquetes tr d’obertura i de tancament en cadascun dels tres passos a dins del bucle. El truc consisteix en utilitzar l’etiqueta #COMPTEUR_BOUCLE i el filtre alterner. Aquesta etiqueta ens indica el número de passos ja efectuats dins del bucle: si la resta de la seva divisió per 3 val 0 hem de realitzar una etiqueta tr d’obertura al principi del "code", si val 2, hem de realitzar una etiqueta tr de tancament al final.

Per aconseguir-ho, no tenim cap necessitat d’efectuar operacions matemàtiques a l’interior del text de l’esquelet. En tindrem prou utilitzant el filtre alterner, el qual accepta qualsevol número d’arguments, diguem-ne n, el primer hauria de ser un enter, anomenem-lo i. Aquest filtre calcula la resta k de la divisió de n-1 per i i ens torna llavors el seu k+iè argument. Per tant, en tenim prou donant-li 3 arguments buits excepte un per no produir les etiquetes tr només en els passos adequats.

Si volem un codi HTML irreprotxable, ens cal produir una seqüència de <td></td> desprès del bucle per tal de completar la darrere línia de la taula quan el número total d’articles no sigui divisible per 3. Altre cop en tindrem prou utilitzant el filtre alterner, però aplicat aquest cop a l’etiqueta #TOTAL_BOUCLE.

Això ens dóna:

<B_ligne>
<table>
<BOUCLE_ligne (ARTICLES) {id_rubrique} {par titre}>[
(#COMPTEUR_BOUCLE|alterner{'<tr>','',''})]
	<td width="33%">
	<a href="#URL_ARTICLE">#TITRE</a>
	</td>[
(#COMPTEUR_BOUCLE|alterner{'','','</tr>'})
]</BOUCLE_ligne>
[(#TOTAL_BOUCLE|alterner{
    '<td></td><td></td></tr>','<td></td></tr>', ''})]
</table>
</B_ligne>

Per millorar-ne la lectura, podem acolorir de manera diferent les línies parells i imparells posant un atribut style a l’etiqueta tr d’obertura. Fa falta llavors substituir el '<tr>' que hi ha més amunt per un nou ús de #COMPTEUR_BOUCLE|alterner, l’argument d’un filtre que pot per ell mateix utilitzar etiquetes i filtres. L’esquelet següent mostrarà d’aquesta manera la taula que hem vist al començament d’aquest article:

<B_ligne>
<table>
<BOUCLE_ligne (ARTICLES) {id_rubrique} {par titre}{0,7}>[
(#COMPTEUR_BOUCLE|
	alterner{[(#COMPTEUR_BOUCLE|
		alterner{'<tr style="background: #eee;">',
			 '<tr style="background: #ddd;">'})],
	    '',''})]
	<td width="33%">
	<a href="#URL_ARTICLE">#TITRE</a>
	</td>[
(#COMPTEUR_BOUCLE|alterner{'','','</tr>'})
]</BOUCLE_ligne>
[(#TOTAL_BOUCLE|alterner{'<td></td><td></td></tr>','<td></td></tr>', ''})]
</table>
</B_ligne>

El mateix tipus de bucle, reemplaçant la crida del títol pel logotip (amb l’etiqueta #LOGO_ARTICLE), permet mostrar una galeria on cada logotip d’article ens doni una vista preliminar (la mida d’aquesta estarà fixada preferentment per tal que tingui una bona configuració) i el text de l’article conté la o les obres exposades.

Per obtenir aquest resultat, la versió inicial d’aquest article utilitzaba els bucles recursius de manera divertida. Aquest divertiment ja no el podrem utilitzar més a dins d’SPIP, i, per altra banda, és menys eficaç que el mètode que us expliquem més amunt, que només fa una única consulta al servidor SQL.

Autor laura, merce Publié le : Mis à jour : 21/03/23

Traductions : عربي, català, English, Español, français, italiano, Nederlands