Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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
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 :
$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 :
$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 :
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
<?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
Pages: 1