2008-10-29 5 views
0

J'ai deux combos; provinces et villes. Je voudrais changer la valeur des villes lorsque la valeur de combo de la province change. Voici mon code

<div class="cities form"> 
<?php 
    $v = $ajax->remoteFunction(array('url' => '/cities/','update' => 'divcity')); 
    print $form-> input('Province.province_id', array('type' => 'select', 'options'=> $provinces, 'onChange' => $v)); 
?> 
<div id="divcity"> 
<?php 
    echo $form->input('Cities.cities_name'); 
?> 
</div> 

Chaque fois que je change combo province, il appelle cities/index.ctp. Quelqu'un veut-il aider? vraiment merci pour votre aide wawan

Répondre

2

Le 'url' => '/ cities /' appelle l'action d'index par défaut du contrôleur de villes.

Ceci affiche automatiquement la vue cities/index.ctp.

Avez-vous inclus le composant RequestHandler dans le contrôleur de villes?

Ceci peut être utilisé pour détecter des requêtes Ajax et ensuite afficher une vue différente.

0

Vous devez d'abord inclure le RequestHandler Component en haut de CitiesController, puis écrire une fonction pour répertorier les villes, en demandant éventuellement un identifiant de province.

Je pense que vous finirez par avoir quelque chose comme ceci:

<?php 
// In the view 
$v = $ajax->remoteFunction(array('url' => '/cities/list','update' => 'divcity')); 
print $form-> input('Province.province_id', array('type' => 'select', 'options'=> $provinces, 'onChange' => $v)); 

// In CitiesController 
function list($province_id = null) { 
    // use $this->City->find('list', array('fields'=>array('City.id', 'City.name'))) 
      // to generate a list of cities, based on the providence id if required 
    if($this->RequestHandler->isAjax()) { 
     $this->layout = 'ajax'; 
     $this->render(); 
    } 
} ?>