29-11-2011 : Remettre dans le débat politique les principes du Conseil National de la Résistance
17-02-2012 : Pétition pour une protection de l’apiculture et des consommateurs face au lobby des OGM
Logo de mon site
Logo de mon site
Faire un don

Luxpopuli / eZ Publish / Langage eZ Publish / eZ Publish : Affichage aléatoire d'un objet





Right menu

Logo du site ez.no  Logo XHTML 1.O du W3C  Logo XHTML 1.O du W3C  Site francophone officiel de Firefox
zero papier grâce aux catalogues et promos en ligne de bonial

eZ Publish : Affichage aléatoire d'un objet

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=""/>
  1. 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.
  2. 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
  3. 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).
  4. 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