Date de publication: le samedi 24 novembre 2007 à 17h22
Dernière modification: par Pascal BOYER le vendredi 19 février 2010 à 16h41
« Article précédent: eZ Publish : concat - exemple de syntaxe
» Article suivant: eZ Publish : Gestion des tableaux (array)
Contexte
Supposons que nous souhaitions afficher, chaque fois que le visiteur de notre site change de page ou la rafraîchit, une image tirée au sort dans un répertoire. Par répertoire il faut bien sûr entendre objet de contenu de l'arborescence du site.
Le dossier d'images
Il faut en effet commencer par créer, disons sous le noeud racine de l'arborescence, c'est à dire le noeud de ID N°2, un objet instancié, par exemple, à partir de la classe folder. Pour la suite de l'article on supposera que cet objet ne nomme Dossier d'images de ID 15.
Les images
Ensuite, il est nécessaire de créer sous le nouveau noeud de ID 15, les objets images qui vont contenir les images que nous souhaitons afficher aléatoirement. Pour cela on utilisera la classe par défaut Image.
On supposera que les objets images suivants on été créés:
- image 1 (ID 18)
- image 2 (ID 19)
- image 3 (ID 20)
- image 4 (ID 21)
- image 5 (ID 22)
Le template random.tpl
Ce template va comporter le code qui va sélectionner une image au hasard.
Voici ce code:
1 {set-block scope=root variable=cache_ttl}0{/set-block} 2 {def $listeImages=fetch(content, list, hash(parent_node_id, 15, 3 'sort_by', array('priority',true()), 4 class_filter_type, include, 5 class_filter_array, array('image'))) 6 $rand=rand( 0, 4)} 7 <img src={$listeImages.$rand.data_map.image.content[original].url|ezroot} alt=""/>
- Ligne 1: indique au système que le résulta de la compilation de ce template ne doit pas être mise en cache. Le template sera donc appelé à chaque chargement de page.
- Lignes 2 à 5: on définit le tableau listeImages qui contient l'ensemble des objets image du noeud de ID 15. C'est objet seront classés en fonction de leur priorité. Ce tableau contient donc les objets $listeImage.0 à $listeImage.4
- Ligne 6: on définit la variable $rand. Cette variable contiendra une valeur aléatoire comprise entre entre 0 et 4 (on a donc bien 5 valeurs, soit autant que d'images).
- Ligne 7: on affiche l'image de façon aléatoire.
Le template pagelayout.tpl
L'hypothèse de départ étant que l'on souhaite afficher une image chaque fois qu'une nouvelle page est affichée par le visiteur, il faut appeler le template random.tpl à partir du template pagelayout.tpl (ou depuis l'éventuelle surcharge que l'on utilise).
Voici la ligne de code à placer dans pagelayout.tpl:
{include uri="design:access/random/banniere.tpl"}
C'est tout.
Commentaires














