2013-06-21 40 views
0

目前在Yii我有一個列表框上的ajax調用,select會動態修改下一個框。 ajax調用當前指向我的控制器和方法。Yii動態列表框

public function actionDynamicProducts() 
    { 
     foreach($_POST['ProductGroups']['id'] as $productGroups){ 
      $groupedP=GroupedProducts::model()->findAll('product_group_id=:product_group_id', array(':product_group_id'=>$productGroups)); 
      $groupedP=CHtml::listData($groupedP,'id','product_id'); 
      foreach($groupedP as $value=>$product_id){ 
       $data=Products::model()->findAll('id=:id', array(':id'=>$product_id)); 
       $data=CHtml::listData($data,'id','title'); 
       foreach($data as $value=>$title){ 
        echo CHtml::tag('option', array('value'=>$value),CHtml::encode($title),true); 
       } 
      } 
     } 
    } 

目前,它工作完全正常,但我想什麼它做的就是如果一組被選中下一個框不顯示與之相關的產品相反。我試過$data=Products::model()->findAll('id!=:id', array(':id'=>$product_id));,但如果選擇了多個項目,它將顯示什麼是不可用的。例如

$Products = 
    Array (
      0 => Ties 
      1 => Shirts 
      2 => Jeans 
    ) 

$groupProducts = 
    Array (
      0 => Shirts and Jeans 
      1 => Ties 
      2 => Jeans and Ties 
    ) 

如果我選擇襯衫和牛仔褲,我想只顯示關係。或者如果我選擇襯衫和牛仔褲,領帶什麼都不應該顯示。

回答

0

你的邏輯有一個錯誤。您的第一個「foreach」的每次迭代都會生成一組選項標籤。 例如:

  1. 您選擇:襯衫和牛仔褲,領帶。
  2. 外部foreach的第一次迭代獲取'Shirts and Jeans'產品組並顯示Ties選項。
  3. 外部foreach的第二次迭代獲得'Ties'產品組並顯示Shirts和Jeans選項。

因此,要解決它,你可以做水木清華這樣的:

// condition whith not in param 
$dbc = new CDBCriteria(); 
$dbc->addNotInCondition('product_group_id', $_POST['ProductGroups']['id']); 
$groupedP=GroupedProducts::model()->findAll($dbc); 
$groupedP=CHtml::listData($groupedP,'id','product_id'); 
foreach($groupedP as $value=>$product_id){ 
    $data=Products::model()->findAll('id=:id', array(':id'=>$product_id)); 
    $data=CHtml::listData($data,'id','title'); 
    foreach($data as $value=>$title){ 
     echo CHtml::tag('option', array('value'=>$value),CHtml::encode($title),true); 
    } 
} 

希望,它會幫助你。