我正在创建一个复选框列表,我想计算当用户选中该复选框时的价格。
我已经在视图部分创建了一个复选框列表
<?php echo CHtml::checkboxList('cblist_addons','',
CHtml::listData(Addon::model()->findAll("car_type_id=1"),'id','concatenedLabel'),
array('separator'=>'','template'=>'{label}{input}','class'=>'cblist_addons'));?>
这个很好。但在控制器部分,我想生成一个字符串,如[a, b, c]
$str_addons = "";
if(isset($_POST['cblist_addons']) && !empty($_POST['cblist_addons']) ) {
foreach($_POST['cblist_addons'] as $addon) {
if ($addon.checked){
$str_addons .= $addon.val(). ', ';
}}
$str_addons = substr($str_addons, 0, -2); //to del the last comma
}
$criteria = new CDbCriteria();
$criteria->select = 'price';
if ($str_addons != ''){
$criteria->condition = 'id in (:cblist_addons)';
$criteria->params = array(':cblist_addons'=> $str_addons) ;
}
else{
$criteria->condition = 'id in (1,2,3,4) '; //the path go into this else part with no error
}
$model_addons = Addon::model()-> findAll ($criteria);
似乎我在从视图部分获得对象失败。我是yii和php的新手我在这几天里试图解决这个问题,所以我希望任何人都能帮助我。
让我再解释一下。我正在创建一个复选框列表,当我按下按钮或检查复选框,一个ajax函数将被调用,价格将被计算和显示在视图部分。
你不需要这样检查
($addon.checked)
as $_POST['cblist_addons']
将只包含您检查过的值。
所以你应该改变这个
if(isset($_POST['cblist_addons']) && !empty($_POST['cblist_addons']) ) {
foreach($_POST['cblist_addons'] as $addon) {
if ($addon.checked){
$str_addons .= $addon.val(). ', ';
}}
$str_addons = substr($str_addons, 0, -2); //to del the last comma
}
if(isset($_POST['cblist_addons']) && !empty($_POST['cblist_addons']) ) {
$str_addons = implode(',',$_POST['cblist_addons']);
}
可以使用内爆
将以逗号分隔的数组中的所有值连接起来现在在你的标准中你使用了这个
$criteria->condition = 'id in (:cblist_addons)';
但是你可以添加In条件使用标准像这样
$criteria->addInCondition($column, $values);
Where $column is the name of the column and $values is the array of the values
所以简而言之,你的整个代码看起来像这样
$criteria = new CDbCriteria();
$criteria->select = 'price';
if(isset($_POST['cblist_addons']) && !empty($_POST['cblist_addons']) ){
$criteria->addInCondition('id', $_POST['cblist_addons']);
} else{
$criteria->addInCondition('id', array(1,2,3,4));
}
$model_addons = Addon::model()-> findAll ($criteria);
第二件事:-
在php中,你不能使用 .
(点)访问对象的属性。你将不得不使用 ->
。