Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
j'ai un sérieux problème avec Zend Dojo et je souhaite votre aide ,bon je réalise un formulaire d'auto-complétion avec zend_dojo,zend_form et la base de donnée avec Doctrine.
Voilà mon contrôleur :
class DojoController extends Zend_Controller_Action { public function searchcityAction() { $form = new Searchformcity(); if ($this->_request->isPost()) { if ($form->isValid($_POST)) { $userId = $this->_getParam('userId'); } else { $form->populate($_POST); $this->view->form = $form; } } else { $this->view->form = $form; } } public function typelistAction() { $language= new LanguesService(); $lng= $language->getIdLanguage(); $query = Doctrine_Query::create() ->select('c.city_name') ->from ('City c') ->where('c.lng_id=?',$lng); $result= $query->execute(); $data = new Zend_Dojo_Data('cit_id', $result); echo $data->toJson(); exit; } }
et Voilà le fotmulaire :
class Searchformtype extends Zend_Form{ public function init(){ $form = new Zend_Form(); $typeId = new Zend_Dojo_Form_Element_FilteringSelect('typeId'); $typeId->setLabel('Sélectionner votre choix :') ->setAutoComplete(true) ->setStoreId('userStore') ->setStoreType('dojo.data.ItemFileReadStore') ->setDijitParam("style",'width:400px') ->setDijitParam("hasDownArrow",'true') ->setStoreParams(array('url'=>'typelist')) ->setAttrib("searchAttr", "city_name") ->setRequired(true); $submit = $form->createElement('submit', 'chercher'); $this->addElements(array($typeId, $submit)); } }
Jusqu'à maintenant tout marche bien quand je tape l'adresse : http://localhost/Projet/public/fr/dojo/searchcity, il m'affiche tout correctement.
Ce que je cherche vraiment c'est d'avoir une liste des villes pour chaque pays sachant que j'ai toutes les villes dans le même tableau dans la BD et je classe mes villes selon le pays par une référence c'est l'identificateur "cit_typ_id".
Ce que je souhaite c'est que la liste des villes change avec le type de la page(pays) c'est à dire :
pour l'adresse : http://localhost/Projet/public/fr/dojo/searchcity/1 j'aurai toutes les villes de la France,
pour l'adresse : http://localhost/Projet/public/fr/dojo/searchcity/2 j'aurai toutes les villes de l'Espagne,
......
Pour mettre cette solution j'ai mis un router.ini comme suit :
[production] .... routes.searchcity.route = "/:language/:controller/:action/:cittypid" routes.searchcity.defaults.controller = dojo routes.searchcity.defaults.action = searchcity routes.searchcity.defaults.language = $local
Et je récupère mon cit_typ_id par (qui me retourne l'identificateur qui est tapé dans l'addresse) :
$cittypid= $this->_getParam('cittypid');
Alors maintenant j'utilise ce résultat dans ma requête au contrôleur comme suit :
public function typelistAction() { $cittypid= $this->_getParam('cittypid'); $language= new LanguesService(); $lng= $language->getIdLanguage(); $query = Doctrine_Query::create() ->select('c.city_name') ->from ('City c') ->where('c.lng_id=?',$lng) ->andwhere('c.cit_typ_id=?',$cittypid); $result= $query->execute(); $data = new Zend_Dojo_Data('cit_id', $result); echo $data->toJson(); exit; }
Alors voilà mon problème,quand je tape l'adresse http://localhost/Projet/public/fr/dojo/searchcity/1 ,pour que j'aurai la liste des villes pour la France dans l'auto-complétion,il m'affiche rien dans le formulaire.
J'ai essayé directement avec l'adresse http://localhost/Projet/public/fr/dojo/typelist/1 et il m'affiche les villes de la France en format JSON et cela veut dire que tout marche bien au niveau de la base donnée et les requêtes...
Je pense que j'utilise deux actions,l'une je déclare le cit_typ_id(searchcity) et l'autre(typelisr) récupère cet identificateur pour l'utiliser dans la requête pour tirer les villes selon le pays ,la chose qui ne se passe pas au même temps et c'est pour cela c'est impossible,j'ai testé Zend_registre pour récupérer mon cit_typ_id mais je tombe dans la même chose.
Je résume tout par une question : comment je peux utiliser un id dans l'url d'une action et je le récupére au même temps dans une autre?
J'ai expliqué en détail pour que le problème soit claire et avoir une solution que vraiment je ne trouve plus comment...
A+.Nll
Dernière modification par elec (08-03-2010 18:59:32)
Hors ligne
solution déjà donné sur ce forum :
http://www.z-f.fr/forum/viewtopic.php?pid=24652#p24652
http://www.z-f.fr/forum/viewtopic.php?id=4571
Hors ligne
Bonjour,
Merci Grummfy,mais vraiment je n'ai pas arrivé à comprendre très bien la solution et comment je peux avoir l'identificateur de la page pour que je puisse changer la liste dans l'auto-complétion de la base de donnée...
Ma question aussi c'est qu'il est le rôle principalement du javascript?
A+,Nll
Hors ligne
tu veux que lorsque sur ton formulaire on change de pays l'auto-complétion des ville change?
Dans ce cas, lorsque tu as changé de pays soit tu recharges la page et tu changes la liste des ville (enfin les paramètre dans le formulaire dojo pour qu'il ai a une autre adresse. Soit lors duj changement de pays, avec du javascript, tu change l'adresse de recherche des villes (ce que je propose) : pas de rechargement de page, mais un changement d'url pour l'auto-complétion ...
Hors ligne
Bonjour,
Je comprend votre solution mais c'est plus ce que je cherche,parce que tout simplement je veux changer la liste selon l'identificateur cela veut dire que je prend l'identificateur selon l'url puis l'appliquer directement dans ma requête pour la base de donnée pour enfin tirer ma liste correcte alors non pas une liste déroulante qui change l'url....Enfin cela reste un problème a mon avis sans solution d'après plusieurs jours.
A+.Nll
Hors ligne
Pages: 1