0

目前在 Yii 中,我在列表框上有一个 ajax 调用,在选择时会动态修改下一个框。ajax 调用当前指向我的控制器和方法。

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
    )

如果我选择衬衫和牛仔裤,我只想显示领带。或者,如果我选择 Shirts and Jeans,Ties 什么也不应该显示。

4

1 回答 1

0

你的逻辑有错误。您的第一个“foreach”的每次迭代都会生成一组选项标签。例子:

  1. 您选择:衬衫和牛仔裤、领带。
  2. 外部 foreach 的第一次迭代获取“衬衫和牛仔裤”产品组并显示 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);
    }
}

希望,它会帮助你。

于 2013-06-22T21:27:28.903 回答