Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 05-04-2013 10:12:56

zizou86
Membre
Date d'inscription: 22-05-2009
Messages: 48

[Résolu] PB autocomplete JQuery

je veux créer un champ autocomplete

le formulaire est dans le module User et le model est dans le module region

js

Code:

$(function() {
    $(".localite").autocomplete({
        minLength: 1,
        source: function(request, response) {
            $.ajax({
                url: "http://tu-navette.com/region/autocomplete",
                type: "POST",
                dataType: "json",
                data: {
                    text: request.term,
                    lan: 'en'
                },
                success: function(data) {
                    response(data);
                }
            });
        }
    });
});

/Region/Controller/Region

Code:

    public function autocompleteAction()
    {

        $JsonModel =  new JsonModel(array(
            'regions' => $this->getRegionTable()->fetchAll(),
        ));

        return $JsonModel;
        
    }

/Region/Model/Region

Code:

    public function exchangeArray($data)
    {
        $this->id                 = (isset($data['id'])) ? $data['id'] : null;
        $this->name              = (isset($data['name'])) ? $data['name'] : null;
        $this->zip_code          = (isset($data['zip_code'])) ? $data['zip_code'] : null;
    }
    
    public function setInputFilter(InputFilterInterface $inputFilter)
    {
        throw new \Exception("Not used");
    }
    
    public function getArrayCopy()
    {
        return get_object_vars($this);
    }

/Region/Model/RegionTable

Code:

    public function fetchAll()
    {
        $resultSet = $this->tableGateway->select();
        return $resultSet;
    }

le pb que la liste du jquery ne s'affiche pas.

Dernière modification par zizou86 (11-04-2013 19:14:07)

Hors ligne

 

#2 05-04-2013 10:19:17

YannickDa
Membre
Date d'inscription: 05-04-2013
Messages: 29
Site web

Re: [Résolu] PB autocomplete JQuery

Et le retour de ta requête ne retourne rien ?

Hors ligne

 

#3 05-04-2013 10:36:25

zizou86
Membre
Date d'inscription: 22-05-2009
Messages: 48

Re: [Résolu] PB autocomplete JQuery

voilà le resultat d'un var_dump dans le autocomplete.phtml

Code:

    Region\Model\Region Object
(
    [id] => 2
    [first_name] => 
    [region_id] => 
    [birth_date] => 
    [publication_date] => 
    [inputFilter:protected] => 
    [name_region] => sfax
    [zip_code] => 3000
)

vous remarquer qu'il marge le resultat d'un user et le resultat d'une region en un seul tableau

Dernière modification par zizou86 (05-04-2013 10:38:20)

Hors ligne

 

#4 05-04-2013 11:14:48

YannickDa
Membre
Date d'inscription: 05-04-2013
Messages: 29
Site web

Re: [Résolu] PB autocomplete JQuery

Il faut plutôt récupérer le résultat de la requête JSON... Faire un console.log(data) pour voir ce qu'il en sort...

Hors ligne

 

#5 09-04-2013 15:18:22

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: [Résolu] PB autocomplete JQuery

Dans ton success, peut-être un :

Code:

 [lang=javascript]
function(data) {return(data);}

Sinon depuis la version 1.8 de jquery, il faut plutôt utiliser les méthodes done() et fail() à la place des options "success" et "error". Dans ton cas :

Code:

 [lang=javascript]
source: function(request, response) {
            $.ajax({
                url: "http://tu-navette.com/region/autocomplete",
                type: "POST",
                dataType: "json",
                data: {
                    text: request.term,
                    lan: 'en'
                }
            })
            .done(function(data){return(data);})
            .fail(function(data){return('');});
}

22914720

Hors ligne

 

#6 11-04-2013 13:09:45

zizou86
Membre
Date d'inscription: 22-05-2009
Messages: 48

Re: [Résolu] PB autocomplete JQuery

Merci pour tous qui ont répondu sur ce poste en voulant m'aider.

ce qui manque dans ma solution c'est d'ajouter ce code dans module.config.php :

Code:

        'strategies' => array(
            'ViewJsonStrategy',
        ),

------------------------------------------------------------------------------------------------

ce qui me bloque la

1- Je recois une resultat json vide

Code:

{"regions":{},"success":true}

sachant que l'input est dans le module User mais l'action est dans le module Region

Hors ligne

 

#7 11-04-2013 13:13:33

YannickDa
Membre
Date d'inscription: 05-04-2013
Messages: 29
Site web

Re: [Résolu] PB autocomplete JQuery

Et si tu fais un debug sur $this->getRegionTable()->fetchAll() il te retourne quelque chose ? Je suppose que non.... ?

Hors ligne

 

#8 11-04-2013 13:21:28

zizou86
Membre
Date d'inscription: 22-05-2009
Messages: 48

Re: [Résolu] PB autocomplete JQuery

non, il me retourne rien.

Hors ligne

 

#9 11-04-2013 13:23:06

zizou86
Membre
Date d'inscription: 22-05-2009
Messages: 48

Re: [Résolu] PB autocomplete JQuery

quand je fais $this->getRegionTable()->getRegion(3);
il me retourne un resultat

Hors ligne

 

#10 11-04-2013 14:06:24

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: [Résolu] PB autocomplete JQuery

Le problème vient donc de ton fetchAll() s'il ne te retourne rien le json ne le retournera pas non plus.

Hors ligne

 

#11 11-04-2013 14:27:33

zizou86
Membre
Date d'inscription: 22-05-2009
Messages: 48

Re: [Résolu] PB autocomplete JQuery

j'utilise fetchAll dans indexAction sans ajax et elle marche bien.

Code:

 public function fetchAll()
    {
        $resultSet = $this->tableGateway->select();
        return $resultSet;
    }

Hors ligne

 

#12 11-04-2013 14:41:41

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: [Résolu] PB autocomplete JQuery

C'est possible que ton objet ne puisse pas être converti en json. Il y a une interface pour ça dans php 5.4 à implémenter (JsonSerializable un truc dans le genre) sinon faudra creuser pour le rendre compatible.

Hors ligne

 

#13 11-04-2013 16:28:48

zizou86
Membre
Date d'inscription: 22-05-2009
Messages: 48

Re: [Résolu] PB autocomplete JQuery

j'ai resolu mon pb
en rendre fetchAll comme ca

Code:

        $resultSet = $this->tableGateway->select();
        $rows = array();
        foreach ($resultSet as$row){
            $rows[] = $row;
        }
        return $rows;

-----------------------------------------------------------------------

Est ce que c'est normal qu'il me retourne des champs concerne la table user avec les champs de regions ?

Code:

{

"id":"2", == champs region

"first_name":null, == champs user
"last_name":null, == champs user
"birth_day":null, == champs user

"name_region":"paris", == champs region
"zip_code":"3000" == champs region

}

Hors ligne

 

#14 11-04-2013 16:31:17

YannickDa
Membre
Date d'inscription: 05-04-2013
Messages: 29
Site web

Re: [Résolu] PB autocomplete JQuery

Il faut voir comment tu as renseigné ton tableGateway.
Normalement tu as du lui renseigner une table et un adapter. S'il a été configuré avec la table user, ca te retourne les infos de la table user smile

Hors ligne

 

#15 11-04-2013 16:47:37

zizou86
Membre
Date d'inscription: 22-05-2009
Messages: 48

Re: [Résolu] PB autocomplete JQuery

chaque module est configué avec son tableGateway

Region/Module.php

Code:

    
public function getServiceConfig()
    {
        return array(
                'factories' => array(
                        'Region\Model\RegionTable' =>  function($sm) {
                            $tableGateway = $sm->get('RegionTableGateway');
                            $table = new RegionTable($tableGateway);
                            return $table;
                        },
                        'RegionTableGateway' => function ($sm) {
                            $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                            $resultSetPrototype = new ResultSet();
                            $resultSetPrototype->setArrayObjectPrototype(new Region());
                            return new TableGateway('regions', $dbAdapter, null, $resultSetPrototype);
                        },
                ),
        );
    }

User/Module.php

Code:

    
public function getServiceConfig()
    {
        return array(
                'factories' => array(
                        'User\Model\UserTable' =>  function($sm) {
                            $tableGateway = $sm->get('UserTableGateway');
                            $table = new UserTable($tableGateway);
                            return $table;
                        },
                        'UserTableGateway' => function ($sm) {
                            $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                            $resultSetPrototype = new ResultSet();
                            $resultSetPrototype->setArrayObjectPrototype(new User());
                            return new TableGateway('users', $dbAdapter, null, $resultSetPrototype);
                        },
                ),
        );
    }

Dernière modification par zizou86 (11-04-2013 16:51:14)

Hors ligne

 

#16 11-04-2013 16:52:18

YannickDa
Membre
Date d'inscription: 05-04-2013
Messages: 29
Site web

Re: [Résolu] PB autocomplete JQuery

C'est qui qui te retourne les champs users ?

Ta réponse ajax ? Où après le retour de ta méthode fetchAll() ?

Hors ligne

 

#17 11-04-2013 16:53:58

zizou86
Membre
Date d'inscription: 22-05-2009
Messages: 48

Re: [Résolu] PB autocomplete JQuery

c'est ma réponse fetchAll en ajax qui me retourne les champs user

Code:

0: {id:2, first_name:null,last_name:null, birth_day:null, name_region:"paris",...}
1: {id:3, first_name:null, last_name:null, birth_day:null, name_region:"marseille",…}
2: {id:5, first_name:null, last_name:null, birth_day:null, name_region:"lyon",…}
3: {id:6, first_name:null, last_name:null, birth_day:null, name_region:"nice",…}

Dernière modification par zizou86 (11-04-2013 16:57:24)

Hors ligne

 

#18 11-04-2013 16:56:46

YannickDa
Membre
Date d'inscription: 05-04-2013
Messages: 29
Site web

Re: [Résolu] PB autocomplete JQuery

C'est à dire que tu fais un debug sur le retour de ta méthode fetchAll et tu as ces champs ?

Si oui, fait un débug sur $row pour voir quel type d'objet il s'agit
Ex : \Zend\Debug\Debug::dump($row);exit;

De là tu devrais voir les champs provenant de la BDD et en même temps l'objet concerné.

Hors ligne

 

#19 11-04-2013 17:00:56

zizou86
Membre
Date d'inscription: 22-05-2009
Messages: 48

Re: [Résolu] PB autocomplete JQuery

j'ai fait le var_dump avant le return en Json et ca donne la meme resultat que le JSON

Code:

0: {id:2, first_name:null,last_name:null, birth_day:null, name_region:"paris",...}
1: {id:3, first_name:null, last_name:null, birth_day:null, name_region:"marseille",…}
2: {id:5, first_name:null, last_name:null, birth_day:null, name_region:"lyon",…}
3: {id:6, first_name:null, last_name:null, birth_day:null, name_region:"nice",…}

Hors ligne

 

#20 11-04-2013 17:04:52

YannickDa
Membre
Date d'inscription: 05-04-2013
Messages: 29
Site web

Re: [Résolu] PB autocomplete JQuery

Je te demande pas de faire un var_dump au niveau de ta réponse JSON car ca ne fait pas avancer le problème.

Ce n'est pas normal que tu ai ces champs supplémentaires. Ca veut dire que tu as un problème ailleurs.
Pour déterminer d'où provient le bug, on est obligé d'aller chercher la source et faire un var_dump sur du JSON mène à rien car on a pas plus d'infos de comment est constitué ce JSON.

Donc, la première des choses c'est de vérifier si le retour du row est correct. Donc place un var_dump dans ta boucle et affiche le contenu de row pour voir si tu as bien ce que tu souhaites...

Hors ligne

 

#21 11-04-2013 17:09:36

zizou86
Membre
Date d'inscription: 22-05-2009
Messages: 48

Re: [Résolu] PB autocomplete JQuery

meme resultat, des champs user avec champs regions.

Code:

        $resultSet = $this->tableGateway->select();
        $rows = array();
        foreach ($resultSet as $row){

            \Zend\Debug\Debug::dump($row);

            $rows[] = $row;
        }
        return $rows;

Hors ligne

 

#22 11-04-2013 17:10:38

YannickDa
Membre
Date d'inscription: 05-04-2013
Messages: 29
Site web

Re: [Résolu] PB autocomplete JQuery

Quel est le type d'objet retourné ?
Peux tu poster le résultat ?

Hors ligne

 

#23 11-04-2013 17:51:21

zizou86
Membre
Date d'inscription: 22-05-2009
Messages: 48

Re: [Résolu] PB autocomplete JQuery

Code:

    array(4) 
{
        [0] => object(Region\Model\Region)#225 (5) 
    {
        ['id'] => string(1) '2'
        ['first_name'] => NULL
        ['last_name'] => NULL
        ['birth_day'] => NULL
        ['name_en'] => string(4) 'paris'
    }
    [1] => object(Region\Model\Region)#227 (5) 
    {
        ['id'] => string(1) '3'
        ['first_name'] => NULL
        ['last_name'] => NULL
        ['birth_day'] => NULL
        ['name_en'] => string(4) 'paris'
    }
    [2] => object(Region\Model\Region)#228 (5)
    {
        ['id'] => string(1) '5'
        ['first_name'] => NULL
        ['last_name'] => NULL
        ['birth_day'] => NULL
        ['name_en'] => string(4) 'paris'
    }
    [3] => object(Region\Model\Region)#229 (5)
    {
        ['id'] => string(1) '6'
        ['first_name'] => NULL
        ['last_name'] => NULL
        ['birth_day'] => NULL
        ['name_en'] => string(4) 'paris'
    }
}

Hors ligne

 

#24 11-04-2013 18:00:40

YannickDa
Membre
Date d'inscription: 05-04-2013
Messages: 29
Site web

Re: [Résolu] PB autocomplete JQuery

Quels sont les propriétés de ta classe Region\Model\Region ?

Hors ligne

 

#25 11-04-2013 18:06:16

zizou86
Membre
Date d'inscription: 22-05-2009
Messages: 48

Re: [Résolu] PB autocomplete JQuery

MEERCIIII,

c'est exactement ça, j'ai fait copier coller de la class User et j'ai oublie de changer les propriétés.

ça marche nikel

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