[RESOLU] JQuery Autocomplete source oracle

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] JQuery Autocomplete source oracle

Re: JQuery Autocomplete source oracle

par diday » 17 févr. 2011, 12:01

Oui j'ai édité cela fonctionne. Encore merci à tous! Je crois que PHPFrance va être en bonne place dans les crédits de ma synthèse. ^^

Re: JQuery Autocomplete source oracle

par jojolapine » 17 févr. 2011, 11:59

Ah oui la pour le coup, il ne lui faut rien d'autre que l'objet json à jqueryui! ;)

Re: JQuery Autocomplete source oracle

par diday » 17 févr. 2011, 11:57

Je ne sais pas utiliser firebug du coup je ne sais pas trop où regarder.

Dans console j'ai ça qui apparait quand j'entre une valeur pour l'autocompletion:

Code : Tout sélectionner

... (en-tête etc.) <div id="contenu_home" class="main_frame"> <a name="contenu"></a> <br /><br /><br /> <div class="introduction"><h3>Search</h3></div> <br></br> <br></br> <br></br> [{"value":"V000000"},{"value":"V000014"},{"value":"V000015"},{"value":"V000016"},{"value":"V000017"},{"value":"V000018"},{"value":"V000019"},{"value":"V000020"},{"value":"V000021"},{"value":"V000022"},{"value":"V000023"},{"value":"V000024"},{"value":"V000025"},{"value":"V000026"},{"value":"V000027"},{"value":"V000028"},{"value":"V000029"},{"value":"V000030"},{"value":"V000031"},{"value":"V000032"},{"value":"V000033"},{"value":"V000034"},{"value":"V000035"},{"value":"V000036"},{"value":"V000037"},{"value":"V000038"},{"value":"V000039"},{"value":"V000040"},{"value":"V000041"},{"value":"V000042"},{"value":"V000043"},{"value":"V000044"},{"value":"V000045"},{"value":"V000046"},{"value":"V000047"},{"value":"V000048"},{"value":"V000049"},{"value":"V000050"},{"value":"V000051"},{"value":"V000052"},{"value":"V000053"},{"value":"V000054"},{"value":"V000055"},{"value":"V000056"},{"value":"V000057"},{"value":"V000058"},{"value":"V000059"},{"value":"V000060"},{"value":"V000061"},{"value":"V000062"},{"value":"V000063"},{"value":"V000064"},{"value":"V000065"},{"value":"V000066"},{"value":"V000067"},{"value":"V000068"},{"value":"V000069"},{"value":"V000070"},{"value":"V000071"},{"value":"V000072"},{"value":"V000073"},{"value":"V000074"},{"value":"V000075"},{"value":"V000076"},{"value":"V000077"},{"value":"V000078"},{"value":"V000079"},{"value":"V000080"},{"value":"V000081"},{"value":"V000082"},{"value":"V000083"},{"value":"V000084"},{"value":"V000085"},{"value":"V000086"},{"value":"V000087"},{"value":"V000088"},{"value":"V000089"},{"value":"V000090"},{"value":"V000091"},{"value":"V000092"},{"value":"V000093"},{"value":"V000094"},{"value":"V000095"},{"value":"V000096"},{"value":"V000097"},{"value":"V000098"},{"value":"V000099"}] <br class="clear-both" /> </div> ... (pied de page et tout ça)
Du coup en fait j'ai l'impression que Zend retourne une vue à l'autocomplete element. Normal je dirais, c'est la vue search.phtml que j'ai créé avec le script. La vue est controllée par l'action suivante :

Code : Tout sélectionner

public function searchAction() { $this->view->title = "Search"; $this->view->headTitle($this->view->title, 'PREPEND'); }
Et du coup j'ai peut-être besoin de faire quelque chose ici. Genre supprimer le layout etc. Je vais voir ce que je peux faire.

--Edit: Bingo!

Code : Tout sélectionner

public function searchAction() { Zend_Layout::resetMvcInstance(); }
Mon autocomplete fonctionne. \o/
Merci beaucoup (beaucoup). Je suis d'autant plus content que j'ai réellement compris de quoi il retourne et que j'ai (un peu) trouvé la solution moi-même. :D

Re: JQuery Autocomplete source oracle

par jojolapine » 17 févr. 2011, 11:49

Que dit firebug?

Re: JQuery Autocomplete source oracle

par diday » 17 févr. 2011, 11:40

Okay on avance doucement. Encore merci pour ta patience (louée soit-elle).

Avec ton bout de code j'obtiens donc :

Code : Tout sélectionner

Array ( [0] => Array ( [value] => V000000 ) [1] => Array ( [value] => V000014 ) [2] => Array ( [value] => V000015 ) ...
Mais toujours sans résultats pour l'autocomplete.

Et si je passe ça en json ça donne:

Code : Tout sélectionner

[{"value":"V000000"},{"value":"V000014"},{"value":"V000015"},{"value":"V000016"},{"value":"V000017"},{"value":"V000018"},{"value":"V000019"},{"value":"V000020"},{"value":"V000021"},{"value":"V000022"},{"value":"V000023"}...
C'est plus propre (plus de majuscules comparé au début) mais toujours pas de résultats autocomplete. :/

Re: JQuery Autocomplete source oracle

par xTG » 17 févr. 2011, 11:33

$results= array();
foreach($res as $r)
  $results[] = array('value' => $r);
;)

Re: JQuery Autocomplete source oracle

par diday » 17 févr. 2011, 11:30

Je n'y parviens pas. J'essaye explode, sans encoder en json, en mettant des arrays partout je n'y parviens pas. :(

Je débute tout ça, il y a un mois je ne savais même pas ce qu'était un ordinateur (ouais bon j'exagère, j'avais déjà codé mais en C seulement). Là entre Zend, php, json etc. je suis un peu perdu quant aux trucs et astuces j'imagine très simple à savoir.

Re: JQuery Autocomplete source oracle

par jojolapine » 17 févr. 2011, 10:58

Non!
Il faut garder la structure:

Code : Tout sélectionner

[ {"value":"a"}, {"value":"b"}, {"value":"c"} ]
Donc tu te débrouilles pour mettre ta requête dans un tableau comme ceci:
<?php

$results = array(
    array('value'=>'a'),
    array('value'=>'b'),
    array('value'=>'c')
);
Allez hop! :)

Re: JQuery Autocomplete source oracle

par diday » 17 févr. 2011, 10:52

En faisant ?term=V0000 j'obtiens la même chose que mon log:

Code : Tout sélectionner

[{"VALUE":"V000000"},{"VALUE":"V000014"},{"VALUE":"V000015"},{"VALUE":"V000016"},{"VALUE":"V000017"},{"VALUE":"V000018"},{"VALUE":"V000019"},{"VALUE":"V000020"},{"VALUE":"V000021"},{"VALUE":"V000022"},{"VALUE":"V000023"},{"VALUE":"V000024"},{"VALUE":"V000025"},{"VALUE":"V000026"},{"VALUE":"V000027"},{"VALUE":"V000028"},{"VALUE":"V000029"},{"VALUE":"V000030"},{"VALUE":"V000031"},{"VALUE":"V000032"},{"VALUE":"V000033"},{"VALUE":"V000034"},{"VALUE":"V000035"},{"VALUE":"V000036"},{"VALUE":"V000037"},{"VALUE":"V000038"},{"VALUE":"V000039"},{"VALUE":"V000040"},{"VALUE":"V000041"},{"VALUE":"V000042"},{"VALUE":"V000043"},{"VALUE":"V000044"},{"VALUE":"V000045"},{"VALUE":"V000046"},{"VALUE":"V000047"},{"VALUE":"V000048"},{"VALUE":"V000049"},{"VALUE":"V000050"},{"VALUE":"V000051"},{"VALUE":"V000052"},{"VALUE":"V000053"},{"VALUE":"V000054"},{"VALUE":"V000055"},{"VALUE":"V000056"},{"VALUE":"V000057"},{"VALUE":"V000058"},{"VALUE":"V000059"},{"VALUE":"V000060"},{"VALUE":"V000061"},{"VALUE":"V000062"},{"VALUE":"V000063"},{"VALUE":"V000064"},{"VALUE":"V000065"},{"VALUE":"V000066"},{"VALUE":"V000067"},{"VALUE":"V000068"},{"VALUE":"V000069"},{"VALUE":"V000070"},{"VALUE":"V000071"},{"VALUE":"V000072"},{"VALUE":"V000073"},{"VALUE":"V000074"},{"VALUE":"V000075"},{"VALUE":"V000076"},{"VALUE":"V000077"},{"VALUE":"V000078"},{"VALUE":"V000079"},{"VALUE":"V000080"},{"VALUE":"V000081"},{"VALUE":"V000082"},{"VALUE":"V000083"},{"VALUE":"V000084"},{"VALUE":"V000085"},{"VALUE":"V000086"},{"VALUE":"V000087"},{"VALUE":"V000088"},{"VALUE":"V000089"},{"VALUE":"V000090"},{"VALUE":"V000091"},{"VALUE":"V000092"},{"VALUE":"V000093"},{"VALUE":"V000094"},{"VALUE":"V000095"},{"VALUE":"V000096"},{"VALUE":"V000097"},{"VALUE":"V000098"},{"VALUE":"V000099"}]
Autocomplete a besoin d'un truc sous la forme array("V000000","V000001",...), du coup j'imagine que si je peux transformer ce truc au dessus sans les value et les accolades peut-être que ça passerait?

Je n'ai pas besoin de LIMIT puisque je limite déjà l'affichage de l'autocomplete à 5 caractères (soit V0000xx, donc 100 résultats maximum). Je ne suis pas limité à 10, je n'en affiche que 10 et ensuite il y a une scrollbar. :)

Re: JQuery Autocomplete source oracle

par jojolapine » 17 févr. 2011, 10:47

Si tu vas directement sur l'url fichier.php?term=abc
Qu'est-ce que tu obtiens? copie-colle ici!

Et pour le LIMIT si ça n'existe pas sous oracle, il doit bien y avoir un moyen de ne pas prendre tout les résultats? non?
De toute façon tu vas en utiliser seulement 10!

Re: JQuery Autocomplete source oracle

par diday » 17 févr. 2011, 10:35

value est en minuscule dans ma requête. :s
LIMIT n'existe pas sous Oracle.

Voici la requête actuellement. Elle retourne bien un tableau json mais rien n'est affiché pour l'autocomplete.

Code : Tout sélectionner

<?php $dsn = Zend_Registry::get('ZendConfig')->pdo->dsn; $username = Zend_Registry::get('ZendConfig')->pdo->username; $password = Zend_Registry::get('ZendConfig')->pdo->password; // Connexion $dbConn = new PDO($dsn, $username, $password); $search = $_GET['term']; $search = $search."%"; // Preparation de le requete $pdoStmt = $dbConn->prepare("SELECT NO_CLI_VPC as value FROM VCCLICGP WHERE NO_CLI_VPC LIKE '$search'"); // Execution de la requete $pdoStmt->execute(); $res = $pdoStmt->fetchAll(PDO::FETCH_ASSOC); Courrier_Log::getInstance()->logDebug(print_r(json_encode($res), true)); // Fermeture connexion $dbConn = null; echo json_encode($res); ?>
--edit: peut-être un lien avec ce paramètre que l'on retrouve dans la demo JQuery:
http://jqueryui.com/demos/autocomplete/#remote

Code : Tout sélectionner

select: function( event, ui ) { log( ui.item ? "Selected: " + ui.item.value + " aka " + ui.item.id : "Nothing selected, input was " + this.value ); }
Mais j'ai plutôt l'impression que c'est inhérent à leur code (pour remplir le tableau en dessous de l'autocomplete).

Re: JQuery Autocomplete source oracle

par jojolapine » 17 févr. 2011, 10:32

value et non pas VALUE ;)
Et le LIMIT ? il est où?

Re: JQuery Autocomplete source oracle

par diday » 17 févr. 2011, 10:29

Okidoki. Je comprends la logique. Du coup maintenant j'ai ça en retour pour json_encode($res)

Code : Tout sélectionner

{"VALUE":"V000000"},{"VALUE":"V000014"},{"VALUE":"V000015"},{"VALUE":"V000016"},{"VALUE":"V000017"},{"VALUE":"V000018"},{"VALUE":"V000019"},{"VALUE":"V000020"},{"VALUE":"V000021"},{"VALUE":"V000022"},{"VALUE":"V000023"},{"VALUE":"V000024"},{"VALUE":"V000025"},{"VALUE":"V000026"},{"VALUE":"V000027"},{"VALUE":"V000028"},{"VALUE":"V000029"},{"VALUE":"V000030"},{"VALUE":"V000031"},...
Mais toujours rien de proposé dans l'autocomplete. Je cherche du coup ce que l'autocomplete veut réellement recevoir.

Je poste ici chaque étape pour permettre à quelqu'un d'autre que moi de saisir le truc, trop souvent sur les forums je vois des "j'ai un problème" "voici une solution spécifique pour ton cas" et aucune étape intermédiaire pour la compréhension. Si ça vous embête je peux zapper mes étapes et revenir ici que quand je suis réellement bloqué. Je ne veux pas flooder. :)

Re: JQuery Autocomplete source oracle

par jojolapine » 17 févr. 2011, 10:23

Bonjour,

non ça a à voir avec ça:
[4] => Array
(
[NO_CLI_VPC] => V000017
)
Il faut que NO_CLI_VPC devienne value

C'est pour ça que j'avais ajouté dans ta requête "as value"

Re: JQuery Autocomplete source oracle

par diday » 17 févr. 2011, 10:20

Super, j'avance j'avance. Merci de votre patience. :)

Donc j'arrive avec ça:

Controller:

Code : Tout sélectionner

$this->view->autocompleteElement = new ZendX_JQuery_Form_Element_AutoComplete('autoComplete'); $this->view->autocompleteElement->setJQueryParams(array("source" => 'pilotage/search')) ->setAttrib('size',10,10,10) ->setAttrib('limit',10) ->setJQueryParam('minLength',4);
Search.phtml

Code : Tout sélectionner

<?php $dsn = Zend_Registry::get('ZendConfig')->pdo->dsn; $username = Zend_Registry::get('ZendConfig')->pdo->username; $password = Zend_Registry::get('ZendConfig')->pdo->password; // Connexion $dbConn = new PDO($dsn, $username, $password); $search = $_GET['term']; $search = $search."%"; // Preparation de le requete $pdoStmt = $dbConn->prepare("SELECT NO_CLI_VPC FROM VCCLICGP WHERE NO_CLI_VPC LIKE '$search'"); // Execution de la requete $pdoStmt->execute(); $res = $pdoStmt->fetchAll(PDO::FETCH_ASSOC); Courrier_Log::getInstance()->logDebug(print_r($res, true)); // Fermeture connexion $dbConn = null; echo json_encode($res); ?>
A sortir cela dans mon log:

Code : Tout sélectionner

Array ( [0] => Array ( [NO_CLI_VPC] => V000000 ) [1] => Array ( [NO_CLI_VPC] => V000014 ) [2] => Array ( [NO_CLI_VPC] => V000015 ) [3] => Array ( [NO_CLI_VPC] => V000016 ) [4] => Array ( [NO_CLI_VPC] => V000017 ) [5] => Array ( [NO_CLI_VPC] => V000018 ) ...
Quand je tape V0000 (j'ai tous les truc commençant par V0000, donc ça marche).

Seulement, l'autocomplete n'affiche rien. J'imagine que ça a à voir avec le echo json_encode($res);, du coup j'y travaille. :)