Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 09-03-2009 11:12:26

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

[Résolu ou presque]Listbox maitre esclave et Dojo

Bonjour,

je n'ai pas trouvé d'exemples Dojo complet de deux liste déroulantes de type "maitre-esclave".
J'ai cherché ici et ailleurs, sans réellement trouver un exemple assez clair pour que je sois capable de le passer sous ZF.

Quelqu'un a t-il une bonne adresse pour ça ?

Dernière modification par Jean-Marc Rigade (12-03-2009 17:43:17)

Hors ligne

 

#2 12-03-2009 17:42:28

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

Re: [Résolu ou presque]Listbox maitre esclave et Dojo

J'ai résolu le problème, je ne sais pas si c'est la meilleure solution, mais ça fonctionne et c'est très réactif.
Donc pour ceux que ça intéresse voici la solution que j'ai trouvée, et je suis preneur des remarques, corrections et propositions.
Les zones du formulaire, les deux listes :

Code:

$sportifscommunaute = new Zend_Form_Element_Select('sportifs_communaute');
        $sportifscommunaute->addMultiOptions($tabcommunautes)
                           ->setDecorators($this->_standardElementDecorator)
                           ->setValue(0)
                           ->setAttrib('onchange','envoyerliste()')
                           ->setLabel('Communauté');
              
        // sportifs_discipline
        $sportifsdiscipline = new Zend_Form_Element_Select('sportifs_discipline');
        $sportifsdiscipline->addMultiOptions($tabsports)
                           ->setDecorators($this->_standardElementDecorator)
                           ->setValue(0)
                           ->setLabel('Sport');

Pour ce formulaire, quand on est en création on a au démarrage les valeurs maîtres et esclaves par défaut. Et dans le cas d'une mise à jour, le "populate" de la forme déclenche l'évènement "on change" et synchronise donc automatiquement la liste esclave en positionnant la bonne occurrence. Par la suite ce sont les actions de l'utilisateur qui vont modifier et éventuellement déclencher le "on change" sur la liste maître (sportifscommunaute).

Dans la view qui contient le formulaire, on a un petit javascript pour Dojo :

Code:

$this->headScript()->appendScript('function envoyerliste() { 
        valsel = document.getElementById("sportifs_communaute").value;
      dojo.xhrGet( { 
        url: "http://localhost/siteentest/public/general/default/sportifs/dynasports/val/"+valsel, 
        handleAs: "text",

        load: function(response, ioArgs) { 
          dojo.byId("sportifs_discipline").innerHTML = response; 
          return response; 
        },
        error: function(response, ioArgs) { 
          console.error("HTTP status code: ", ioArgs.xhr.status); 
          return response; 
          }
        });
      }
 ');

Enfin dans le controller on neutralise l'affichage du layout et on va récupérer les valeurs à envoyer vers la liste esclave :

Code:

  public function dynasportsAction()
{
      $layout = Zend_Layout::getMvcInstance();
      $param = $this->_request->getParam('val');
      $layout->disableLayout();

       $techsports = new Techsports();
       $rows = $techsports->techsports_lire_dynasports($param); // Lectures données en base
       $tabsports = '';
       foreach ($rows as $val)
       {
             $tabsports = $tabsports.'<option value="'.$val->sport_id.'">'.$val->sport_sport.'</option>';
       }
       $this->view->donnees = $tabsports; 
}

Seulement pour que ça marche je suis obligé d'avoir aussi une view qui ne contient que ça :
dynasports.phtml

Code:

<?php echo $this->donnees; ?>

Sinon je ne reçoit pas mes données dans ma listebox...
Donc si quelqu'un peut me donner le coup de pouce pour avoir un truc plus propre...

Dernière modification par Jean-Marc Rigade (12-03-2009 17:43:44)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages