Bonjour,
Suite à cette discussion relatant mes déboires pour avoir les 36682 communes françaises dans une liste déroulante, j'essaie de mettre en oeuvre l'auto-complétion avec un Zend_Dojo_Form_Element_FilteringSelect, suivant ce tutoriel.
En dehors du fait que j'ai le même problème de mauvais rendu que dans cette autre discussion, j'ai trois autres problèmes :
1) Si l'adresse est déjà complète avec sa commune, à partir des données de l'étudiant en BDD, lors de l'affichage du formulaire, la FilteringSelect n'affiche pas la commune.
2) J'ai beau taper le début d'une commune existante ou cliquer sur le rectangle du bout de la zone, censé contenir la flèche pour dérouler la liste, rien ne se passe !
3) Si je tape le nom d'une commune existante en entier dans la zone et que je passe au champ suivant du formulaire, seules les trois premières lettres de la commune s'affichent !
Voici mon code...
Dans le formulaire Infosperso.php :
Dans le controlleur AccueiletudiantController.php, j'ai ajouté la fonction pour générer le Zend_Dojo_Data :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 // Commune de résidence de l'étudiant $id_commune_residence = new Zend_Dojo_Form_Element_FilteringSelect('id_commune_residence'); $id_commune_residence ->setLabel('Commune de résidence') ->setStoreId('communeStore') ->setStoreType('dojo.data.ItemFileReadStore') ->setStoreParams(array('url' => 'listecommunes')) ->setAttrib('searchAttr', 'cmn_nom') ->setRequired(true);
Dans le layout.php, j'ai ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 /** * Prépare la source de données Dojo contenant la liste des communes françaises */ public function listecommunes() { $db = Zend_Db_Table_Abstract::getDefaultAdapter(); $listecommunes = $db->fetchPairs(" SELECT cmn_id, cmn_nom FROM tr_commune_cmn " ); $data = new Zend_Dojo_Data('communes', $listecommunes); $this->_helper->autoCompleteDojo($data); }
Et dans le bootstrap.php, j'ai ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <head> <?php echo $this->headMeta(); echo $this->headTitle(); echo $this->headLink()->prependStylesheet($this->baseUrl().'/css/style.css'); $this->JQuery()->addStyleSheet($this->baseUrl() . '/js/jquery/development-bundle/themes/smoothness/jquery-ui-1.8.7.custom.css'); $this->JQuery()->setUiLocalPath($this->baseUrl() .'/js/jquery/development-bundle/ui/jquery-ui-1.8.7.custom.js'); echo $this->jQuery(); echo $this->dojo(); ?> </head>
Je suis preneur de toute bonne idée pour résoudre ce besoin pourtant basique : vérifier que la commune tapée par l'étudiant existe bien, et si possible le guider lors de sa saisie.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 protected function _initJQuery() { $this->bootstrap('view'); $view = $this->getResource('view'); $view->addHelperPath('ZendX/JQuery/View/Helper/', 'ZendX_JQuery_View_Helper'); } protected function _initDojo() { $this->bootstrap('view'); $view = $this->getResource('view'); Zend_Dojo::enableView($view); $view->addHelperPath('Zend/Dojo/View/Helper/','Zend_Dojo_View_Helper'); $view -> dojo() -> setLocalPath('/stagmas/public/js/dojo/dojo/dojo.js') -> addStyleSheetModule('dijit.themes.tundra') -> setDjConfigOption('usePlainJson',true) -> setDjConfigOption('parseOnLoad', true) -> enable(); }
Partager