Auto-completion avec Zend et jQuery
Dans cette discussion, j'exposais mes tentatives avec un autocomplete en Zend_Dojo mais sans succès.
J'essaie avec Jquery qui semble bien plus simple à mettre en oeuvre mais j'ai un message d'erreur quand je tape une première lettre.
Je précise de suite que j'ai aussi dans ce formulaire un ZendX_JQuery_Form_Element_DatePicker qui fonctionne parfaitement, ainsi qu'un autre ZendX_JQuery_Form_Element_AutoComplete avec un jeu de données plus petit que je peux charger en même temps que le formulaire et qui fonctionne très bien lui aussi.
Dans le formulaire, j'ai ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| // Celui qui fonctionne
$etablissement = new Application_Model_DbTable_Etablissement();
$result = $etablissement->fetchAll();
$liste_etablissements = array();
$liste_etablissements[0] = '';
foreach($result as $etb)
{
$liste_etablissements[$etb->etb_id] = $etb->etb_nom;
}
$etb_id = new ZendX_JQuery_Form_Element_AutoComplete('etb_id');
$etb_id
->setLabel('Nom')
->setRequired(false)
->setFilters(array('StripTags'))
->setJQueryParams(array('source' => $liste_etablissements));
// Celui qui pose problème
$id_commune_etablissement = new ZendX_JQuery_Form_Element_AutoComplete('id_commune_etablissement');
$id_commune_etablissement
->setLabel('Commune')
->setRequired(false)
->setFilters(array('StripTags'))
->setJQueryParams(array('url' => $baseurl.'/accueiletudiant/recherchecommunes',
'minChars' => 1)); |
Dans le modèle Commune.php, j'ai créé cette fonction :
Code:
1 2 3 4 5 6 7 8 9 10
| public function getCommunesParDebutNom($debut)
{
$debut = $debut.'%';
$sql = "
SELECT cmn_id, cmn_nom
FROM tr_commune_cmn
WHERE cmn_nom LIKE :debut
";
return $this->_db->fetchAll($sql, array('debut' => $debut));
} |
Dans le contrôleur, j'ai créé cette fonction :
Code:
1 2 3 4 5 6 7 8
| public function recherchecommunesAction()
{
$request = $this->getRequest();
$debut = $request->getParam('term');
$commune = new Application_Model_DbTable_Commune();
$result = $commune->getCommunesParDebutNom($debut);
$this->_helper->autoComplete($result); |
Le formulaire s'affiche rapidement mais j'obtiens l'erreur suivante quand je tape une première lettre dans la zone :
Je sens que je ne suis pas loin de la solution mais...