2013-12-14 76 views
1

我是Yii框架中的新手,我無法通過下拉菜單解決此問題。下拉依賴於yii框架中的多選擇下拉列表

在我的頁面中,我有兩個下拉列表,他們都是多選下拉列表。第二個取決於第一個下拉菜單。例如,

1-dropdown是水果,蔬菜,飲料;

2-dropdown取決於用戶選擇,如果用戶選擇水果和飲料,它應該顯示蘋果,葡萄,果汁,啤酒(所有在一個下拉列表中);

如果用戶選擇只有一個選項e.g蔬菜中的第一個下拉列表,第二應顯示洋蔥,土豆等

這裏的源代碼:

//---------- VIEW ------------ 

    <div id="left"> 
         <div class="btn-group"> 
          <?php    
           echo CHtml::dropDownList('group', '', CHtml::listData($group,'group','group'), array(
            'multiple'=>'multiple', 
            'ajax'=>array(
             'type' => 'POST', 
             'url' => CController::createUrl('site/change'), 
             'update' => '#e5' 
            ), 
            'id' => 'e4', 
            'style' => 'width:300px' 
           )); 
          ?> 
         </div> 
        </div> 
        <div id="right"> 
         <div class="btn-group"> 
          <?php 
           echo CHtml::dropDownList('subgroup','', array(), array(
            'multiple' => 'multiple', 
            'id'=>'e5', 
            'style' => 'width:300px' 
           )); 
          ?> 
         </div> 
        </div> 


// ------------ CONTROLLER ------------ 


public function actionChange() 
     { 

      $groupName = $_POST['group'];   


      $dpCriteria = new CDbCriteria(); 
      $dpCriteria->select = 'subgroups'; 
      $dpCriteria->condition = 'group = '.$groupName; 

      $data = Subgroups::model()->findAll($dpCriteria); 

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

回答

0

你提出的方法是Dependent Dropdown。 YII框架有創建Dependent Dropdown的教程。檢查此link的更多細節和例子

編輯:

在代碼中,你正在檢查組名的單值'group = '.$groupName;。但$groupname是一個值的數組。因此,您在mysql中使用in,其中內置$ groupname數組的值。

你在標準條件是:

$ dpCriteria->條件= '組中('。.implode( 「」,$組名) ')';

+0

我看到這篇文章,我可以做相關的下拉,但我不能做多選擇下拉我的意思是第一個是多選,當你選擇第2,3或4個選項時,應顯示依賴於第一選擇。我在上面寫了它。謝謝你的回答! –

+0

根據您的意見更新了我的答案。 –

0

嘗試像this.In你的Ajax陣列,

'update'=>'#'.CHtml::activeId($model,'attribute_to_update'), 
'data'=>array('atribute'=>'js:this.value'),