Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour
Dans un formulaire, j'ai 2 champs : Un 1er champ de type SELECT dans lequel j'ai les villes (BDD: table..>ville ....>ID_VILLE;VILLE), puis un 2eme champ de type SELECT dans laquelle j'ai les quartier (BDD: table..> quartier..> ID_QUARTIER;ID_VILLE;QUARTIER).
Je souhaite que tout changement dans le 1er champ ville mette à jour dynamiquement la liste de choix dans le second champ quartier.
je tente d'utiliser JQUERY et JSON.
*********page AjoutBien.phtml*****************
function populateFruitVariety() {
//alert($('#ville').val());
$.getJSON('/index/getville', function(data) {
alert($('#ville').val());
var select = $('#quartier');
var options = select.attr('options');
$('option', select).remove();
$.each(data, function(index, array) {
options[options.length] = new Option(array['quartier']);
});
});
}
$(document).ready(function() {
populateFruitVariety();
$('#ville').change(function() {
populateFruitVariety();
});
});
<form action="<?php echo $this->escape($this->element->getAction()); ?>"
method="<?php echo $this->escape($this->element->getMethod()); ?>">
<td width="65%" height="27"><?php echo $this->element->ville->renderViewHelper(); ?></td>
<td width="65%" height="27"><?php echo $this->element->quartier->renderViewHelper(); ?></td></form>
************page IndexController.php*******************
public function getvilleAction(){
$id = $this->_request->getParam('id');
$q = Doctrine_Query::create()
->select('QUARTIER')
->from('App_Models_Quartier q')
->where('q.ID_VILLE = ?', $ $id);
$rows = $q->execute();
$this->_helper->json($rows);
echo json_encode($rows);
}
************page Bootstrap *************************
protected function _initView()
{
// Initialize view
$view = new Zend_View();
$view->doctype('XHTML1_STRICT');
$view->headMeta()->appendHttpEquiv('Content-Type',
'text/html; charset=utf-8');
$view->addHelperPath('Zend/Dojo/View/Helper/', 'Zend_Dojo_View_Helper');
$view->addHelperPath('App/View/Helper/', 'App_View_Helper');
$view->addHelperPath('ZendX/JQuery/View/Helper', 'ZendX_JQuery_View_Helper');
Zend_Dojo::enableView($view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
// Add it to the ViewRenderer
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
$viewRenderer->setView($view);
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
//seulement si on utilise d'autres frameworks ajax
ZendX_JQuery_View_Helper_JQuery::enableNoConflictMode();
// Return it, so that it can be stored by the bootstrap
return $view;
}
**************************************************************
Merci d'avance.
Hors ligne
personnes ne veux m 'aidee <:
Hors ligne
Pas trop le temps de rentrer dans les détails mais voici dans les grandes lignes la méthode que j'utilise :
Controller :
Dans le predispatch je défini le contexte a JSON pour l'action chargé de retourner les données remplissant le select. L'action ressemble à ceci :
public function quartierAction() { $quartier = getQuartiers($idVille); // retourne un array() $this->view->data = $quartier; }
View :
Je crée un évènement sur le changement de mon select option qui appel en ajax l'action 'quartier' avec le paramètre format = json (pour utiliser le contexte json) et ensuite je remplie mon select suivant avec le retour de cette fonction
Voila rien de plus simple
ps : à noter que le contexte JSON permet de transformer automatiquement en JSON les données transmissent à la vue.
Dernière modification par shadypierre (19-04-2012 14:10:54)
Hors ligne
j ai predispatch je défini le contexte a JSON et j ai crée l action quartier et a la fin de mon action j ai mis echo json_encode($rows); mais sur la page AjoutBien.phtml ca me retourne rien voila le code pr recupere
$.ajax(
{
url: 'quartier',
type: "POST",
context: document.ajax,
data: {"format" : "json",
"id" : $('#ville').val()},
success: function(data)
{
var select = $('#quartier');
var options = select.attr('options');
$('option', select).remove();
$.each(data, function(index, array) {
options[options.length] = new Option(array['quartier']);
});
}
});
NB : sur l action quartier j ai mis echo $this->_request->getParam('id'); ca m affiche ca sur une fenetere http apach
Dernière modification par tahaaa (19-04-2012 18:49:07)
Hors ligne
Tu n'as pas besoin du json_encode : http://framework.zend.com/manual/fr/zen … h.contexts
Par défaut cependant, aucun script de vue n'est nécessaire, il va simplement sérialiser en JSON toutes les variables de vues, et les envoyer en tant que réponse.
Ensuite je suis pas top en js mais je vois pas ou tu dis dans ce code que lors d'un changement du premier select tu fais ton appel ajax
Hors ligne
voila le code pour rappler l' Ajax :
<script>
function populateFruitVariety() {
alert($('#ville').val());
$.ajax(
{
url: 'getville',
type: "POST",
context: document.ajax,
data: {"format" : "json",
"id" : $('#ville').val()},
success: function(data)
{
alert("ttt");
$("#ajax").html(data);
var select = $('#quartier');
var options = select.attr('options');
$('option', select).remove();
$.each(data, function(index, array) {
options[options.length] = new Option(array['quartier']);
});
}});
}
$(document).ready(function() {
populateFruitVariety();
$('#ville').change(function() {
populateFruitVariety();
});});
</script>
mais le problème comme je peux récupéré la résultat de mon quartierAction ($row) :<
Hors ligne
ca fait 2 jour que je suis bloque dans cette parité aidee moi SVP
Hors ligne
Soit patient nous sommes nous aussi occupé par notre propre travail!
Avec firebug ou la console chrome (ou autre) l'appel ajax s'effectue bien ?
Tu as une erreur retourné dans la console JS ?
As tu essayé d'aller directement sur l'url censé retourner les quartiers pour vérifier que tu as bien du json d'affiché?
Hors ligne
je suis patient mais je doit présente le projet se lundi c pour ca et j ai un retard de 3 jour a cause de cette partie je suis desole. pour le code
j ai fait apple directement action ca fonction tres bien il a bien affiche les quartier mais pour passe le tb des quartier de l action vers le vu l ajax il m afficher rien
success: function(data)
{
$.each(data, function(index, array) {
options[options.length] = new Option(array['quartier']);
alert(options[options.length]);
});}
Hors ligne
j ai ajouter cette declaration Action:
public function init()
{
$ajaxContext = $this->_helper->getHelper('ajaxContext');
$ajaxContext->addActionContext('quartier','json')
->initContext();
}
phtml:
success: function(data)
{
alert(data);
}
et la c affiche : [object Object] ??
Dernière modification par tahaaa (20-04-2012 13:15:29)
Hors ligne
Uilise plutot le 'contextSwitch'
public function preDispatch() { $contextSwitch = $this->_helper->getHelper('contextSwitch'); $contextSwitch->addActionContext('quartier', 'json') ->initContext(); }
Ensuite dans ta vue un truc dans le genre
$(document).ready(function() { $("#ville").change(function() { window.ville = $("#ville option:selected").val(); $.post("/controller/quartier/format/json",{ ville : window.ville }, function(result){ $.each(data, function(index, array) { options[options.length] = new Option(array['quartier']); alert(options[options.length]); }); }); }); $('#ville').trigger('change'); }); </script>
Dernière modification par shadypierre (20-04-2012 13:38:34)
Hors ligne
j ai utile exactement se que vous m'avez donnez
Indexcontrole.php a écrit:
public function init(){
$this->view->addHelperPath( 'ZendX/JQuery/Helper', 'ZendX_JQuery_View_Helper');
$this->view->addHelperPath('Zend/Dojo/View/Helper/', 'Zend_Dojo_View_Helper');
$contextSwitch = $this->_helper->getHelper('contextSwitch');
$contextSwitch->addActionContext('quartier', 'json')
->initContext();
}
public function quartierAction(){
$id = $this->_request->getParam('id');
$q = Doctrine_Query::create()
->select('QUARTIER')
->from('App_Models_Quartier q')
->where('q.ID_VILLE = ?', $id);
$rows = $q->execute();
$this->view->rows = $rows;
}
Ensuite dans ma vue:
AjouteBien.phtml a écrit:
<script>
$(document).ready(function()
{
$("#ville").change(function()
{
window.ville = $("#ville option:selected").val();
$.post("getville/format/json",{
ville : window.ville
}, function(result){
alert (result);
$.each(result, function(index, array) {
options[options.length] = new Option(array['quartier']);
alert(options[options.length]);
});
});
});
$('#ville').trigger('change');
});
</script>
mais il m affiche toujours [object Object] comme resultas de mon alert (result);
Dernière modification par tahaaa (20-04-2012 14:14:09)
Hors ligne
Ça me semble logique puisque tu retourne du json
Hors ligne
alors c'est quoi la solution SVP pour qu il m affiche les quartiers
Hors ligne
est ce que je utilse json_encode($users); pour decode le json ????
Hors ligne
est ce que si possible que vous me donne ton code JavaScript pour que vous afficher la résultats de Json sur votre page vu phtml merci
Dernière modification par tahaaa (23-04-2012 12:34:40)
Hors ligne
j ai trouvez la solution lol ) ) )
Hors ligne
ça pourrait surement servir à d'autre si tu pouvais nous expliquer qu'elle était finalement le problème.
Hors ligne
pouvez vous nous donner la solution finale , j'ai le même problème , pouvez vous nous donnez la solution final ? merci
Hors ligne
s'il vous plait c'est quoi la solution final parce que j'ai suivi se tutorial depuis le début jusqu'à la fin et j'ai pas eu le résultat voulu , j'ai toujours le message alert avec ({quartier:{});
Dernière modification par croux89 (03-06-2012 20:06:08)
Hors ligne
Pages: 1