Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] menulist en cascade avec DAO

Posted by dlalleme on 10/16/2008 18:43

Bonsoir,

Je m'arrache les cheveux avec quatre menulist qui s'initialisent à l'aide de DAO en fonction de la valeur de la liste précédente.

Voici mes deux premiers daos, les deux autres sont identiques à la deuxième ...

 <datasources>
 <primarytable name="l_cat1" realname="liste_categories1" primarykey="idx_cat1" />
 </datasources>
 <record>
 <property name="cat1" fieldname="idx_cat1" datatype="int"/>
 <property name="libelle" fieldname="libelle" datatype="string" maxlength="70"/>
 </record>

la deuxième

 <datasources>
 <primarytable name="l_cat2" realname="liste_categories2" primarykey="idx_cat2" />
 </datasources>
 <record>
 <property name="cat1" fieldname="idx_cat1" datatype="int"/>
 <property name="cat2" fieldname="idx_cat2" datatype="int"/>
 <property name="libelle" fieldname="libelle" datatype="string" maxlength="70"/>
 </record>
 <factory>
   <method name="findByCat" type="select">
     <parameter name="cat1" />
       <conditions>
         <eq property="cat1" expr="$cat1" />
       </conditions>
   </method>
 </factory>

Maintenant ma forms

 <menulist ref="cat1" required="true">
  <label></label>
  <datasource dao="admin~list_cat1"
              method="findAll"
              labelproperty="libelle"
              valueproperty="cat1"
              />
 </menulist>
 <menulist ref="cat2" required="true">
  <label></label>
  <datasource dao="admin~list_cat2"
              method="findByCat"
              criteriafrom="cat1"
              labelproperty="libelle"
              valueproperty="cat2"
              />
 </menulist>
 <menulist ref="cat3" required="true">
  <label></label>
  <datasource dao="admin~list_cat3"
              method="findByCat"
              criteriafrom="cat2"
              labelproperty="libelle"
              valueproperty="cat3"
              />
 </menulist>
 <menulist ref="cat4" required="true">
  <label></label>
  <datasource dao="admin~list_cat4"
              method="findByCat"
              criteriafrom="cat3"
              labelproperty="libelle"
              valueproperty="cat4"
              />
 </menulist>

Le formulaire est correctement affiché sauf les valeurs dans les listes. Seule la première liste est remplie, les autre sont vides...

Avez-vous une idée ? Avant de me lancer dans le javascript pour l'initialisation ...

Cordialement

Denis

  [Opened] Re: menulist en cascade avec DAO

Reply #1 Posted by bobi on 10/16/2008 22:29

Salut Denis,

Comme indiqué dans la doc. sur les données dynamiques, les valeurs d'une liste dépendant d'un critère de type //criteriaFrom// ne sont pas modifiés directement lors du changement de valeur du champ critère mais le seront seulement au prochain affichage du formulaire, donc après un submit.

Du coup, pour l'instant il est plus facile d'utiliser des champs cachés comme critère et de manipuler leur valeur $form->setData('hidden_field','value') en fonction des choix utilisateurs et avant l'affichage du formulaire.

 
 

  [Opened] Re: menulist en cascade avec DAO

Reply #2 Posted by laurentj on 10/17/2008 09:51

Salut Denis

si tes listes sont vides, c'est normal si tu n'as pas spécifié les valeurs de cat1 et cie : elles semblent en effet vides (aucun enregistrement dans tes tables ont pour id une valeur vide, n'est -ce pas ;-) ).

Avant l'affichage, dans ton controlleur, il faut que tu initialises les données de ton formulaire : tu dois faire un setData('cat1','une_valeur'), setData('cat2','une_valeur') etc..

  [Opened] Re: menulist en cascade avec DAO

Reply #3 Posted by laurentj on 10/18/2008 16:35

Dans la version 1.1, il y aura jquery intégré, avec un ou deux plugins de templates.. Pour l'instant donc c'est limité mais, cela n'empêche absolument pas, comme tu l'as démontré, d'utiliser Ajax comme tu l'as fait :-)

 
Page
  1. menulist en cascade avec DAO