Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 29-03-2011 10:47:18

CinePhil
Membre
Date d'inscription: 24-03-2010
Messages: 19

Source de ZendX_Jquery_Autocomplete mal formée ?

Bonjour,
Mon problème d'autocomplete sur les communes n'est toujours pas résolu, malgré des centaines de lecture de mes messages, que ce soit ici, sur le forum anglais de Zend Framework ou sur Developpez.com.

J'en découvre un autre que je vous décris ci-dessous...

Soit un formulaire avec deux ZendX_JQuery_Form_Element_AutoComplete :

Code:

        // Établissement où se déroule le stage
        $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;
        }
        
        $stg_id_etablissement = new ZendX_JQuery_Form_Element_AutoComplete('stg_id_etablissement');
        $stg_id_etablissement
            ->setLabel('Établissement où se déroule le stage')
            ->setRequired(false)
            ->setFilters(array('StripTags'))
            ->setJQueryParams(array('source' => $liste_etablissements))
            ->setValue(''); 
        
        // Conseiller pédagogique
        $personne = new Application_Model_DbTable_Personne();
        $result = $personne->listeConseillers();
        $liste_conseillers = array();
        $liste_conseillers[0] = '';
        foreach($result as $conseiller)
        {
            $liste_conseillers[$conseiller['prs_id']] = $conseiller['prs_nom'].' '.$conseiller['prs_prenom'];
        }
        
        $stg_id_conseiller_pedago = new ZendX_JQuery_Form_Element_AutoComplete('stg_id_conseiller_pedago');
        $stg_id_conseiller_pedago
            ->setLabel('Conseiller pédagogique')
            ->setRequired(false)
            ->setFilters(array('StripTags'))
            ->setJQueryParams(array('source' => $liste_conseillers))
            ->setValue('');

Les deux sont fabriqués sur le même principe.

L'autocomplete sur le choix de l'établissement fonctionne en affichant la liste des possibles dès la frappe du premier caractère, l'autre n'affiche rien et se comporte comme une simple zone de texte !

J'ai remarqué une différence dans le code HTML produit :

$("#stg_id_etablissement").autocomplete({"source":["","Universit\u00e9 Paul Sabatier","EPLEA Capou"]}); 
$("#stg_id_conseiller_pedago").autocomplete({"source":{"0":"","4":"Lema\u00eetre Jean","3":"P\u00e9dago Alfred"}});

Pour l'établissement, la source commence par un crochet [ alors que pour le conseiller pédagogique elle commence par une accolade {.
De plus, les identifiants des conseillers pédagogiques sont présents alors qu'il n'y a que le nom des établissements.

Serait-ce dû au fait que j'utilise fetchAll pour les établissements et une fonction basée sur une requête pour les conseillers pédagogiques ?

Pourtant, les deux tableaux envoyés en paramètres aux deux autocomplete ont la même structure :

Établissements :
array(3) {
[0] => string(0) ""
[1] => string(25) "Université Paul Sabatier"
[2] => string(11) "EPLEA Capou"
}
Conseillers pédagogiques :
array(3) {
[0] => string(0) ""
[4] => string(14) "Lemaître Jean"
[3] => string(14) "Pédago Alfred"
}

Une idée de la raison de ce phénomène bizarre ?

EDIT :
Je viens de faire une fonction pour limiter la liste des établissements aux lycées agricoles. Le tableau envoyé à l'autocomplete est maintenant celui-ci :

array(2) {
[0] => string(0) ""
[2] => string(11) "EPLEA Capou"
}

Et ZendX_Jquery génère cette fois cette structure dans le HTML de la page :

Code:

$("#stg_id_etablissement").autocomplete({"source":{"0":"","2":"EPLEA Capou"}});

La source commence maintenant par une accolade et l'autocomplete ne fonctionne plus !

Dernière modification par CinePhil (29-03-2011 11:06:58)

Hors ligne

 

#2 29-03-2011 19:40:13

Dede
Membre
Date d'inscription: 26-06-2009
Messages: 99

Re: Source de ZendX_Jquery_Autocomplete mal formée ?

Bonsoir,
Je ne suis pas certain que ce soit la source du problème mais c'est peut être une piste :
$liste_etablissements etait un objet formé de cette façon :

Code:

array(
    "",
    "Université Paul Sabatier",
    "EPLEA Capou");

Hors tu as maintenant un objet formé comme ceci :

Code:

array(
    0 => "",
    2 => "EPLEA Capou");
// ou un truc du genre ?

Regarde quel structure avait ton objet initial.
Dede


« Il ne faut pas lier un navire à une seule ancre, ni une vie à un seul espoir. »
Epictète
http://www.noumcreation.com

Hors ligne

 

#3 30-03-2011 08:40:56

CinePhil
Membre
Date d'inscription: 24-03-2010
Messages: 19

Re: Source de ZendX_Jquery_Autocomplete mal formée ?

Dede a écrit:

Bonsoir,
Je ne suis pas certain que ce soit la source du problème mais c'est peut être une piste :
$liste_etablissements etait un objet formé de cette façon :

Code:

array(
    "",
    "Université Paul Sabatier",
    "EPLEA Capou");

Hors tu as maintenant un objet formé comme ceci :

Code:

array(
    0 => "",
    2 => "EPLEA Capou");
// ou un truc du genre ?

Regarde quel structure avait ton objet initial.
Dede

Selon moi, ce n'était pas un objet !

Code:

        $liste_etablissements = array();
        $liste_etablissements[0] = '';
        foreach($result as $etb)
        {
            $liste_etablissements[$etb->etb_id] = $etb->etb_nom;
        }

C'est ça que je ne comprends pas !

les deux tableaux envoyés en paramètres aux deux autocomplete ont la même structure

Il semble que ce soit l'interprétation du tableau qui soit différente pour former la source de l'autocomplete ! Bizarre non ?

EDIT :
Nouveaux tests...
Avec ce code dans le formulaire :

Code:

        // Établissement où se déroule le stage
        $etablissement = new Application_Model_DbTable_Etablissement();
        $result = $etablissement->fetchAll();//listeLyceesAgri();
        $liste_etablissements = array();
        $liste_etablissements['0'] = '';
        foreach($result as $etb)
        {
            $liste_etablissements[$etb['etb_id']] = $etb['etb_nom'];
        }
Zend_Debug::dump($liste_etablissements);

J'obtiens ceci :

array(3) {
  [0] => string(0) ""
  [1] => string(25) "Université Paul Sabatier"
  [2] => string(11) "EPLEA Capou"
}

Et ceci dans le source HTML produit :

Code:

$("#stg_id_etablissement").autocomplete({"source":["","Universit\u00e9 Paul Sabatier","EPLEA Capou"]});

=> L'ensemble de valeurs est entouré par des crochets [ ].

Avec ce code dans le formulaire :

Code:

        // Établissement où se déroule le stage
        $etablissement = new Application_Model_DbTable_Etablissement();
        $result = $etablissement->listeLyceesAgri();
        $liste_etablissements = array();
        $liste_etablissements['0'] = '';
        foreach($result as $etb)
        {
            $liste_etablissements[$etb['etb_id']] = $etb['etb_nom'];
        }
Zend_Debug::dump($liste_etablissements);

=> J'ai juste changé le fetchAll par la fonction de mon modèle qui limite la liste des établissements aux lycées agricoles.
J'obtiens ceci :

array(2) {
  [0] => string(0) ""
  [2] => string(11) "EPLEA Capou"
}

=> Il y a un élément de moins, ce qui est normal, mais c'est aussi un tableau de la même structure non ?

Et pourtant dans le code HTML, j'ai ceci :

Code:

$("#stg_id_etablissement").autocomplete({"source":{"0":"","2":"EPLEA Capou"}});

=> L'ensemble de valeurs est entouré par des accolades { }
=> 2 tableaux ayant la même structure en entrée, 2 résultats de forme différente en sortie !

EDIT 2
J'ai complété mon test avec fetchAll :

Code:

Zend_Debug::dump($liste_etablissements, 'Liste établissements : ');
Zend_Debug::dump(is_object($liste_etablissements), 'Objet : ');
Zend_Debug::dump(is_array($liste_etablissements), 'Tableau : ');

Résultat :

Liste établissements : array(2) {
  [0] => string(0) ""
  [2] => string(11) "EPLEA Capou"
}

Objet : bool(false)

Tableau : bool(true)

Même avec fetchAll, c'est bien un tableau en entrée de la source de l'autocomplete.

Je ne vois vraiment pas la différence entre les deux tableaux !

EDIT 3
Après quelques tests complémentaires, j'ai constaté qu'avec fetchAll, $result est un objet et dans la boucle foreach qui peuple le tableau, les $etb sont des objets.
Avec la fonction listeLyceesAgri() du modèle, dont la dernière ligne est $tid->_db->fetchall($sql);  $result et $etb sont des tableaux.

Dans les deux cas, les éléments du tableau (etb_nom) et leur clé (etb_id) sont des "string".

Le tableau final est donc dans les deux cas, il me semble, un tableau de "string" à clés de type "string".

Le comportement de autocomplete reste mystérieux.

Dernière modification par CinePhil (30-03-2011 11:59:54)

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