Yii动态列表框

时间:2013-06-21 21:37:13

标签: php yii

目前在Yii中我在列表框上有一个ajax调用,select会动态修改下一个框。 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
    )

如果我选择衬衫和牛仔裤,我想要领带展示。或者,如果我选择衬衫和牛仔裤,则不应该显示任何关系。

1 个答案:

答案 0 :(得分:0)

你的逻辑有误。第一个'foreach'的每次迭代都会生成一组选项标记。 例如:

  1. 你选择:衬衫和牛仔裤,领带。
  2. 外部foreach的第一次迭代获得'Shirts and Jeans'产品组并显示领带选项。
  3. 外部foreach的第二次迭代获得'Ties'产品组并显示衬衫和牛仔裤选项。
  4. 所以要解决它,你可以这样做:

    // 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);
        }
    }
    

    希望,它会对你有帮助。