29-11-2011 : Remettre dans le débat politique les principes du Conseil National de la Résistance
29-01-2012 : Parce que nous sommes un peuple debout, agissons pour rester dignes et responsables !
Logo de mon site
Logo de mon site
Faire un don

Luxpopuli / eZ Publish / Langage eZ Publish / eZ Publish: afficher les sélections du datatype «selection»





Right menu

Logo du site ez.no  Logo XHTML 1.O du W3C  Logo XHTML 1.O du W3C  Site francophone officiel de Firefox

Langage eZ Publish

Table des matières

  1. Langage eZ Publish
  2. Afficher les sélections du datatype «selection»
  3. Afficher un lien vers un fichier PDF

eZ Publish: afficher les sélections du datatype «selection»

Date de publication: le vendredi 23 novembre 2007 à 13h16
Dernière modification: par Pascal BOYER le dimanche 29 janvier 2012 à 21h15

Le datatype Selection

Le datatype Selection permet un choix unique ou multiple.

Pour afficher la ou les options sélectionnées il existe au moins deux solutions.

Première méthode

{attribute_view_gui attribute=$node.object.data_map.identifiant_du_datatype_selection}

Auquel cas, le template design/standard/templates/content/datatype/view/ezselection.tpl est utilisé pour afficher le résultat.

L'inconvénient de cette méthode, est que dans le cas d'une sélection multiple, vous ne gérez pas l'affichage produit. Toutes les options sélectionnées sont les une sous les autres. Pour contourner ce problème, on préfèrera la deuxième méthode.

Deuxième méthode

Le code est inspiré du template ezselection.tpl:

{* ON DÉFINIT UN TABLEAU selected_id_array CONTENANT LE/LES id DE/DES OPTION/S SÉLECTIONNÉE/S *}
{let selected_id_array=$node.data_map.identifiant_du_datatype_selection.content}
 
{* BOUCLE: POUR CHACUNE DES OPTIONS DU DATATYPE Sélection *}
{section var=Options loop=$node.data_map.identifiant_du_datatype_selection.class_content.options}
 
      {* ON EXCLU TOUTES LES OPTIONS DONT LE id N'EST PAS EGAL À L'UN DES id CONTENUS PAR LE TABLEAU selected_id_array *}
      {section-exclude match=$selected_id_array|contains( $Options.item.id )|not}
 
      {* ON ÉCRIT LE NOM DE L'OPTION SÉLECTIONNÉE
      {$Options.item.name|wash( xhtml )}
 
      {* ON DÉFINIT UNE CHAÎNE DE CARACTÈRES QUI S'AFFICHERA APRÈS LE NOM DE CHAQUE OPTION SÉLECTIONNÉE (SAUF APRÈS LA DERNIÈRE) *}
      {delimiter} -- {/delimiter}
 
{* ON FERME LA BOUCLE *}
{/section}
{/let}

Exemple

Soit une classe d'objet contenant un attribut (identifiant mes_selections) basé sur le datatype Sélection . Peu importe que l'on décide d'autoriser ou non les choix multiples. Le cas échéant, le tableau $liste_des_id_selectionnes (voir code ci-dessous) contiendra alors simplement plusieurs id.

Le code présenté ci-après est une réécriture de celui proposé par défaut par le template et où les boucles basées sur section ( structure de contrôle obsolète ) ont été remplacées par foreach :

{def $list_enfants=fetch( content, list, hash( parent_node_id, $node.node_id))}
 
{foreach $list_enfants as $enfant}
 
   {* ON DÉFINIT UN TABLEAU $liste_des_id_selectionnes CONTENANT LE/LES id DE/DES OPTION/S SÉLECTIONNÉE/S *}
   {def $liste_des_id_selectionnes=$enfant.data_map.mes_selections.content}
 
   {* POUR CHACUNE DES OPTIONS DU DATATYPE mes_selections *}
   {foreach $enfant.data_map.mes_selections.class_content.options as $option}
 
      {* SI LE TABLEAU liste_des_id_selectionnes NE CONTIENT PAS D'OPTION DONT LE id EST ÉGAL AU id DE L'OPTION TRAITÉE *}
      {if $liste_des_id_selectionnes|contains( $option.id )|not}
 
          {* ALORS ON NE FAIT RIEN *}
          {skip}
 
      {* SINON *}
      {elseif <mettre ici une condition quelconque>}
            <span style="color: red;">{option.name|wash( xhtml )}</span>
      {else}
          {$option.name|wash( xhtml )}
      {/if}
         {delimiter} - {/delimiter}
   {/foreach}
{/foreach}
{/def}

:
Le paramètre delimiter ne fonctionne pas aussi bien dans une boucle foreach que dans une boucle section en ce sens que la chaîne de caractères définie entre {delimiter} et {/delimiter} sera également présente après la dernière option écrite.

Exemple

Rechercher le nombre d'enfants en se basant sur la valeur sélectionnée dans un datatype Sélection:

{def $listes_enfants=fetch( content, list_count, hash( 'parent_node_id', $node.node_id,
                            'attribute_filter', array( array( 'ma_classe/mon_attribut_selection', 'in', array( 22) ))))}

Renvoie le nombre d'enfants dont l'option sélectionnée vaut 22

Exemple avec choix unique

Soit un datatype Sélection dont on a défini qu'il est à choix unique:

{* POUR AFFICHER LE TABLEAU DES INFOS RELATIVES AU DATATYPE selection *}
{$node.data_map.identifiant_datatype_selection.class_content|attribute(show,3)}
 
{* POUR AFFICHER TOUTES LES VALEURS DES OPTIONS DU DATATYPE selection *}
{def $touteslesoptions=$node.data_map.identifiant_datatype_selection.class_content.options}
{foreach $touteslesoptions as $option}
  option={$option.name|wash( xhtml )}<br />
{/foreach}
<br /><br />
 
{* POUR AFFICHER UNIQUEMENT LE «id» DE L'OPTION SELECTIONNEE - FORCEMENT «...content.0» CAR CHOIX UNIQUE *}
{def $idOptionSelectionnee=$node.data_map.identifiant_datatype_selection.content.0}
idOptionSelectionnee={$idOptionSelectionnee}
<br /><br />
 
{* AFFICHER LA VALEUR DE L'OPTION SELECTIONNEE *}
valeur sélectionnée={$node.data_map.identifiant_datatype_selection.class_content.options.$idOptionSelectionnee.name}

Commentaires