Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 16-08-2011 12:35:51

bandit_rouge
Membre
Date d'inscription: 18-02-2010
Messages: 31

[ZendX_JQuery_Form_Element_AutoComplete] autocomplete Hidden ID jquery

Bonjour,

Après des mois de recherche et de tests sur ce composant j'ai trouvé LA SOLUTION!!!!!!

Grace au tut. de Cinéphil:
http://blog.developpez.com/cinephil/p98 … y-sur-une/
et après quelques correction j'obtiens un liste auto complétée avec le CODE POSTAL et LA VILLE!
Et...... roulement de tambours!
L'ID de mon tuple sélectionner dans un hidden field!

Je pense que pas mal d'entre nous ont tourné autour de la solution.
Le truc c'est d'utilisé un tableau avec les champs ID et LABEL ou VALUE
Le champ affiche le LABEL et une fois la donnée sélectionnée c'est le VALUE qui est affichée.




LA SOLUTION
C'est parti:
Tout pareil que dans le tut de Cinéphil mise a part:


Dans mon controlleur

Code:

public function recherchevillesAction()
    {
        $request = $this->getRequest();
        $debut = $request->getParam('term');

        $ville = new Application_Model_DbTable_Villes();
        $result = $ville->getVillesParDebutNom($debut);

        $listevilles = array();

        foreach($result as $cmn)
        {
            $label = $cmn['code_postal'] ." ". $cmn['article_min'] . $cmn['ville_min']; // _min en minuscule
            $listevilles[] = array(
                'id'=>$cmn['id'],
                'label'=>$label                      
               );
        }
    $this->_helper->json(array_values($listevilles));
    }

Dans mon formulaire:

Code:

 $id_villes = new ZendX_JQuery_Form_Element_AutoComplete('id_villes');
        $id_villes
            ->setLabel('BETA Code postal :')
            ->setRequired(false)
            ->setFilters(array('StripTags'))
            ->setJQueryParams(array('source'    => '/riders/recherchevilles',
                                    'minLength' => 3,
                                    'select'    => new Zend_Json_Expr(
                                                    "function(event, ui) {
                                                        $('#idcp').val(ui.item.id)
                                                    }"
                               )))
            ;
    
        $this->addElement($id_villes);
        
        $this->addElement('hidden', 'idcp');

Et voila !
Je suis sur ce truc depuis 4 mois... ca fait du bien d'avoir trouvé. :-p

Pour info, il y a 2 solutions possibles:
-Traité le tableau de résultat dans le controlleur pour faire un nouveau tableau avec les champs ID et LABEL (c'est ce que j'ai choisi vu mon niveau en javascript).
-Faire ça en javascript dans le fomulaire pour traiter les champs de la base de donnée, dans ce cas la il ne faut pas utiliser l'option array_values et mettre directement le resultat: 
$this->_helper->json($result);
Cette dernière solution peut être utile si on obtient les données via geonames par exemple.
Là je vous conseil de regarder le code javascript sur le site Jquery autocomplete pour essayer de l'adapter!
http://jqueryui.com/demos/autocomplete/#remote-jsonp

Code:

success: function( data ) {
                        response( $.map( data.geonames, function( item ) {
                            return {
                                label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
                                value: item.name
                            }
                        }));
                    }

A tester

Dernière modification par bandit_rouge (16-08-2011 12:37:57)

Hors ligne

 

#2 18-08-2011 10:30:06

Wawan
Membre
Date d'inscription: 09-10-2009
Messages: 14

Re: [ZendX_JQuery_Form_Element_AutoComplete] autocomplete Hidden ID jquery

Bonjour,
J'avoue que je ne comprends pas tout le fonctionnement mais cette solution m’intéresse. Je n'ai pas non plus suivi le tutoriel ni n'ai eu l'occasion de tester ta solution.

On voit un que dans ton action "recherchevillesAction" tu renvois un tableau comprennent deux éléments. Comment affectes tu la valeur à afficher ? A quel moment tu "dis" affiche moi la valeur de 'label' à ton élément autocomplete ?

PS : Pour info, pour ne pas avoir à me prendre la tête sur ce genre de problème, j'ai simplement mis un truc du genre :

Code:

[lang=php]
$result = $ville->getVillesParDebutNom($debut);
$listevilles = array();
foreach($result as $cmn) {
        $listevilles[] = $cmn['code_postal'] ." ". $cmn['article_min'] . " | " . $cmn['id']
}

Ensuite j'ai simplement parser le texte pour récupérer l'id derrière le pipe (|).

Dernière modification par Wawan (18-08-2011 10:32:05)

Hors ligne

 

#3 19-08-2011 10:42:56

bandit_rouge
Membre
Date d'inscription: 18-02-2010
Messages: 31

Re: [ZendX_JQuery_Form_Element_AutoComplete] autocomplete Hidden ID jquery

"label" et " value" sont des mots clés pour ce composant. Il faut bien regarder la doc de jqueryUI autocomplete.
j'étais passé à coté... ;-)

Dernière modification par bandit_rouge (19-08-2011 10:43:42)

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