目前在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
)
如果我选择衬衫和牛仔裤,我想要领带展示。或者,如果我选择衬衫和牛仔裤,则不应该显示任何关系。
答案 0 :(得分:0)
你的逻辑有误。第一个'foreach'的每次迭代都会生成一组选项标记。 例如:
所以要解决它,你可以这样做:
// 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);
}
}
希望,它会对你有帮助。