Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 04-04-2010 20:00:03

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

ZendX_JQuery Autocompletion avec retour de données async

Bonjour,
Je cherche à utiliser la méthode autocomplete avec un appel vers un controleur qui me renvoie les données de la BDD...

dans la vue :

Code:

<?=$this->autoComplete("location",
                       "",
                       array('url' => '/moncontroller/recherche',
                       'dataType' => 'json'));?>

A noter que j'ai essayer avec et sans "dataType" en utilisant le contextswitch mais cela ne change rien?
Dans le controller :

Code:

public function init() {
     Zend_Controller_Action_HelperBroker::addHelper(new ZendX_JQuery_Controller_Action_Helper_AutoComplete());
}

public function rechercheAction(){
     $db = new Model_Recherches();
     $results = $db->recherchelist($_GET['term']);
     $reponse = array();
     foreach ($results as $result) {
         $reponse[] = $result['nom'];
     }

     $this->_helper->autoComplete($reponse);
}

Comme dans la doc.
Les données sont bien retourné à chaque frappe mais l'autocomplete ne s'exécute pas... aucune erreur de JS dans le cas d'un renvoie de données.
Lorsqu'aucune donnée n'est renvoyé, j'ai cette erreur dans la reponse :

b is null
[Break on this error] (function(a){a.widget("ui.autocomplete...{item:this.active})}})}(jQuery));;/*
jquery....min.js (ligne 168)

Là j'y comprend pas grand chose ?
Merci de votre aide


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

Hors ligne

 

#2 05-04-2010 11:07:08

throrin19
Membre
Date d'inscription: 01-03-2009
Messages: 318
Site web

Re: ZendX_JQuery Autocompletion avec retour de données async

en mettant le résultat à retourner dans une autre action, tu va avoir un temps de latence assez élevé, même en local. Si sa se trouve, tu va voir dans la mauvaise action ou bien une erreur type 500 a lieu dans cette action et tu ne le verra pas.

Hors ligne

 

#3 05-04-2010 11:50:02

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

Re: ZendX_JQuery Autocompletion avec retour de données async

voici la réponse en local :
GET /controller/recherche?term=f  200 OK 311ms

Même si il est vrai il y a un temps de latence, je souhaite aller chercher dans la BDD que lorsque c'est nécessaire... Ce code fonctionne très bien,

Code:

<?=$this->autoComplete("location",
                       "",
                       array('data' => array("new york","los angeles","miami","vegas","washington")));?>

mais ce qui m'intéresse c'est d'avoir une réponse dynamique.
D'ailleur dans la doc ils disent que la valeur est envoyer dans $_GET['q'] alors qu'elle est dans la variable $_GET['term']... et ne dise rien d'autre que de renvoyer les données de cette facon :

Code:

$this->_helper->autoComplete($reponse);

J'aimerais savoir que est le nom/le type et la forme de la variable à renvoyer par une action pour alimenter l'autocomplete?


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

Hors ligne

 

#4 05-04-2010 12:59:22

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

Re: ZendX_JQuery Autocompletion avec retour de données async

Bon merci les cloches !!
J'ai une solution mais je la trouve moyenne....
dans la vue :

Code:

<?=$this->autoComplete("location",
                       "",
                       array('url' => '/moncontroller/recherche'));?>

dans le contrôleur:

Code:

public function rechercheAction(){
     $this->getHelper('layout')->disableLayout();
     $this->getHelper('viewRenderer')->setNoRender();
     
     $db = new Model_Recherches();
     $results = $db->recherchelist($_GET['term']);
     $reponse = '[';
     foreach ($results as $result) {
         $reponse .= '{ "value":"'.$result['nom'].'"},;
     }
     $reponse = rtrim($reponse,',').']';
     
     echo $reponse;
}

J'attends vos réactions car je ne trouve pas ca très propre...même si ça fonctionne
Si vous avez une manière plus "Zend" de faire je suis preneur


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

Hors ligne

 

#5 05-04-2010 14:12:37

throrin19
Membre
Date d'inscription: 01-03-2009
Messages: 318
Site web

Re: ZendX_JQuery Autocompletion avec retour de données async

Pour ma part je ne passe pas par l'autocomplete jquery de ZendX mais directement par du js jquery. Je fais tout dans la même action. Je te donne la réponse demain, je ne l'ai pas sous la main.

Hors ligne

 

#6 05-04-2010 14:38:45

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

Re: ZendX_JQuery Autocompletion avec retour de données async

Merci, toujours bon à prendre.
J'y ai penser à le faire directement en JS mais je voulais comprendre avec ZendX, histoire de rester "Zend" cool
Ce qui me chagrine c'est que le format  [{'value':'reponse'}] ressemble à du json mais en initialisant le contextswitch ça ne fonctionne pas sad


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

Hors ligne

 

#7 06-04-2010 17:23:22

throrin19
Membre
Date d'inscription: 01-03-2009
Messages: 318
Site web

Re: ZendX_JQuery Autocompletion avec retour de données async

utilise Zend_Json_Encode();

Hors ligne

 

#8 06-04-2010 19:03:14

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

Re: ZendX_JQuery Autocompletion avec retour de données async

Merci je vais faire les tests et je te dis smile


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

Hors ligne

 

#9 06-04-2010 22:47:09

throrin19
Membre
Date d'inscription: 01-03-2009
Messages: 318
Site web

Re: ZendX_JQuery Autocompletion avec retour de données async

bon, j'ai ressortis la partie où j'ai fais ça. Je pense réaliser un petit tuto sur mon site bientôt.
Je te le met brut de décoffrage par contre.

Bon dans mon cas, je fais une liste avec chaque mot séparé par un ';'

Code:

//création de la liste autocomplete
$mappeurTag = new Tag_Models_TagMapper();
$liste = $mappeurTag->fetchAll();
        
$listechar = '[';
foreach($liste as $tag)
{
    $listechar .= '"'.$tag->nomtag.'", ';
}
$listechar .=']';
        
$listejson = new Zend_Json_Expr($listechar);

Voilà, mon tableau est créer et il est encodé en JSON. Ici, j'utilise l'usine à gaz pour la BDD.
Ensuite j'appelle ma fonction JS (je fournis le code aussi t'en fais pas)

Code:

$this->view->jQuery()    ->addJavascriptFile(Zend_Controller_Front::getInstance()->getBaseUrl().'/scripts/scriptsadm.js')
                                ->addJavascriptFile(Zend_Controller_Front::getInstance()->getBaseUrl().'/scripts/jquery.autocomplete.js')
                                ->addOnLoad('autocomplete('.$listejson.');')
                                ->enable();

Bon ma fonction autocomplete reçoit en paramètre, mon tableau encodé (sinon sa marchera pas).

Et voici le js associé:

Code:

function autocomplete(tableau){
    $("#tags").autocomplete(tableau, {
        width: 320,
        max: 4,
        highlight: false,
        multiple: true,
        multipleSeparator: "; ",
        scroll: true,
        scrollHeight: 300
    });
}

Et cette fonction transformera mon input avec comme id="tag" en autocomplete. Simple, Rapide et Efficace smile

Hors ligne

 

#10 07-04-2010 09:52:45

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

Re: ZendX_JQuery Autocompletion avec retour de données async

Effectivement c'est très simple et je pense efficace smile.
Mais, dans mon cas, l'autocomplete ne sera que très rarement utilisé donc je ne souhaite pas ralentir l'affichage de la vue avec une requête SQL systématique, pour un besoin minime ( 1 sur 15 voir sur 20...)
En tous cas je pense qu'un tuto serait bienvenu car la doc est assez mal documenter hmm.

Ce que je retiendrais de ce weekend Pascal :

- Format des données à renvoyer :
   [{"value":"valeur qui s'affiche automatiquement", "id":"id de la valeur sélectionné", "autre":"autre valeurs"}, etc...]
La clé value sera afficher automatiquement et on peut  insérer d'autre clés...

Code:

<?=$this->view->autoComplete("autocompletion",
                             "",
                             array('url' => '/controller/action',
                                   'select' => new Zend_Json_Expr('function(event,ui){$("#aff").html("Id de cette valeur: "+ui.item.id)}')));?>

quelque soit la clé utilisé, on la récupère de cette manière : ui.item.nomdecle

En tous cas merci throrin19


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

Hors ligne

 

#11 07-04-2010 20:13:36

throrin19
Membre
Date d'inscription: 01-03-2009
Messages: 318
Site web

Re: ZendX_JQuery Autocompletion avec retour de données async

elle ne ralenti pas énormément la vue, même beaucoup moins que via une action externe. Ma page s'affiche en 1-2s et derrière il y a une centaine d'éléments.
Les select sont rapides. Fais un select sur une table simple ayant 1000000 d'enregistrements. En moyenne tu l'affiche en 5s

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