2013-06-04 4 views
0

Моя типовая база данных;dropDownList yii 3 или больше моделей

My sample databese

МОДЕЛЬ/REALSTATE.PHP

public function relations() 
{ 
    return array(
     'neighborhood' => array(self::BELONGS_TO, 'Neighborhood', 'fk_id_neighborhood'), 

    ); 
} 

Что мне нужно, это при регистрации собственности, есть все опции, см пример; VIEW/REALESTATE/add.php

enter image description here

Мой вопрос не связан с Ajax, как сделать эту интеграцию для каждого DropDownList я имею конкретную модель? как это?

ответ

2

В любом случае вам понадобится ajax.

$form->dropDownList($model, $state, CHtml::listData(State::model()->findAll(),'id','state'), array(
     'empty'=>"Select state",  
     'ajax' => array(
         'type' => 'POST', 
         'url'=>$this->createUrl('registration/state'), 
         'update' => '#YOURcityID',       
       'data'=>array('state'=>'js:this.value',), 
      'success'=> 'function(data) {$("#YourcityID").empty(); 
          $("#YourcityID").append(data); 

               } ', 

     ))); 

В yourcontroller:

public function actionState() 
{ 

$data=Cities::model()->findAll('fk_id_state=:state', 
        array(':state'=> $_POST['state'])); 

    $data=CHtml::listData($data,'city_id','city'); 
      foreach($data as $value=>$city) { 
         echo CHtml::tag 
           ('option', array('value'=>$value),CHtml::encode($city),true); 
        } 

} 

Вернуться к форме:

$form->dropDownlist($model, 'city', array(),array(
     'empty'=>"Select city", 
'ajax' => array(
          'type' => 'POST', 
          'url'=>$this->createUrl('registration/city'), 
          'update' => '#YOURneighborhoodID',       
        'data'=>array('city'=>'js:this.value',),  
       'success'=> 'function(data) {          $("#YourneighborhoodID").empty(); 
              $("#YourneighborhoodID").append(data); 

                } ', 
     )); 

В контроллере:

public function actionCity() 
{ 

$data=Neighborhood::model()->findAll('fk_id_city=:city', 
        array(':city'=> $_POST['city'])); 

    $data=CHtml::listData($data,'neghborhood_id','neighborhood'); 
      foreach($data as $value=>$neighborhood) { 
         echo CHtml::tag 
           ('option', array('value'=>$value),CHtml::encode($neighborhood),true); 
        } 

} 

Это будет работать как шарм. Проверяйте опечатки и переменные, потому что я спешил. С уважением.

Смежные вопросы