Fork me on GitHub

Des blocs tous différents

200602
Mai
  Mercowe Documentations 4952
Documentations

Voici une astuce qui intéressera les créateurs de thèmes. Elle permet d'afficher chaque bloc de votre thème dans un format différent sans pour autant compliquer le code (x)html en rajoutant des tests sur les titres des blocs.

L'astuce consiste à remplacer l'utilisation de classes dans les boucles "foreach" par des IDs générés à la volée (pour rappel une classe peut-être utilisée plusieurs fois dans un même document, mais pas un ID qui doit rester unique).

Une boucle classique (simplifiée) :

<{foreach item=block from=$xoops_lblocks}> 
    <
div class="BlocGauche"
    <{
$block.title}> 
    <{
$block.content}>
    </
div
<{/foreach}>


Pour remplacer la classe par un ID il faudra que tous les blocs affichés par la boucle utilisent un ID différent.
Pour cela il suffit d'utiliser la variable d'itération générée par le foreach.
(variable d'itération = compteur de boucles)

Cette variable est identifiée comme ceci :
{$smarty.foreach.foreachname.iteration}
elle démarre à 1 et est incrémentée de 1 à chaque tour.

Remarque : il est nécessaire de nommer la boucle(foreachname) pour extraire cette valeur.

Sachant cela on peut maintenant utiliser des IDs :

Exemple :
<{foreach name=bouclegauche item=block from=$xoops_lblocks}> 
    <
div id="BlocGauche<{$smarty.foreach.bouclegauche.iteration}>"
    <{
$block.title}> 
    <{
$block.content}>
    </
div
<{/foreach}>


Chaque ID prendra alors les valeurs :
BlocGauche1
BlocGauche2
BlocGauche3
etc....

Il ne reste plus qu'à personnaliser leur format dans le css.
Exemple :
#BlocGauche1 {background:white}
#BlocGauche2 {background:blue}
#BlocGauche3 {background:yellow}
etc...


Remarque :
Penser à prévoir assez d'IDs dans le css pour palier à toute éventualité, 5 à 6 IDs doivent normalement être largement suffisant mais rien n'empêche d'en prévoir une dizaine.

Note: 9.00 (1 vote) - Noter cet article -

Partager Twitter Partagez cette article sur GG+
Format imprimable Envoyer cet article à un ami
Les commentaires appartiennent à leurs auteurs. Nous ne sommes pas responsables de leur contenu.
Régulier
Inscrit le: 05/12/2003
De: Marseille
Contributions: 322
Mercowe Posté le: 02/05/2006 16:07  Mis à jour: 02/05/2006 16:07
 Re: Des blocs tous différents
A noter que cette méthode peut être aussi trés utile en cas d'utilisation de javascript se basant sur des IDs.
Xoops accro
Inscrit le: 15/07/2004
De:
Contributions: 4763
blueteen Posté le: 02/05/2006 16:47  Mis à jour: 02/05/2006 16:47
 Re: Des blocs tous différents
très intéressant, merci !
Semi pro
Inscrit le: 27/08/2003
De: Perpignan
Contributions: 1255
Paul Posté le: 02/05/2006 18:25  Mis à jour: 02/05/2006 18:25
 Re: Des blocs tous différents
Merci Mercowe, très interressant effectivement
Semi pro
Inscrit le: 04/02/2003
De: Qc.ca
Contributions: 1389
king76 Posté le: 02/05/2006 19:45  Mis à jour: 02/05/2006 19:45
 Re: Des blocs tous différents
Pas bête cette astuce ! Je faisais pareil si j'ai bonne mémoire avec les numéros d'ID des blocs. En l'occurence il me semble qu'avec l'ID du blocs, meme si tu le déplaces à droite ou a gauche ca ne change pas, contrairement à cette itération propre à Smarty.

Mais appelé le ID du bloc demande de modifier le fichier header.php si je ne dis pas de bétise.

En l'occurence, moi je me sert plus du fait de ne pas afficher le titre du bloc à coup de TEST. Mais en y reflechissant bien, je pourrais me créer un id spécialement sur le titre et un autre sur le corps de telle manière que je pourrais cacher le titre grâce à du CSS et ca serait plus simple

Merci !!
Xoops accro
Inscrit le: 04/02/2003
De: Le Mans
Contributions: 12273
Christian Posté le: 02/05/2006 23:29  Mis à jour: 02/05/2006 23:29
 Re: Des blocs tous différents
Merci beaucoup Mercowe pour cette contribution qui va rendre service à plus d'un, compte tenu que cette demande revient régulièrement dans nos forums.
Semi pro
Inscrit le: 05/06/2004
De:
Contributions: 750
Niluge Posté le: 06/05/2006 02:17  Mis à jour: 06/05/2006 02:17
 Re: Des blocs tous différents
C'est en gros ce que j'ai fait!

Il y a juste à modifier 5 lignes dans le header.php ( correspondant aux 5emplacements des blocs) pour qu'il transmette le bid unique du bloc au template, et après un beau id="blk_t_<{$block.bid}>" pour le titre et id="blk_c_<{$block.bid}>" pour le contenu, et après c'est gagné!

La limitation de ce genre de truc c'est qu'il faut retoucher son css à chaque mise à jour de module car je crois que les blocks sont supprimés puis recréés( à confirmer), bref c'est plus de la bidouille qu'autre chose, m'enfin c'est comme avant quoi
Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

42 Personne(s) en ligne (1 Personne(s) connectée(s) sur Articles) | Utilisateur(s): 0 | Invité(s): 42 | Plus ...