我有两个数组。 一个是包含我的数据库检索到的所有类别$类别 ,另一个是$其中包含需要的类别preSelectedCategories要在我的复选框列表加载自己的状态时,预先选择。 我试着这样做:
<?php echo $form->labelEx($model,'category_id'); ?>
<?php echo $form->checkBoxList($model, 'category_id', $categories, $preSelectedCategories, array('multiple'=>true)); ?>
<?php echo $form->error($model,'category_id'); ?>
但我没有成功。 谁能帮我解决这个问题呢? 谢谢!
编辑:我已经知道使用了CHtml :: CheckBoxList的能帮上忙,但我想在这里是因为我用一个模型来验证复选框列表使用CActiveForm :: CheckBoxList的 。
Answer 1:
一种选择是使用CHtml::activeName
为输入取一个合适的名字,并把它传递给CHtml::checkBoxList
,像其他人所说。
也就是说,在我看来,另一种选择,更合适的是那些添加category_id
是你要预先检查控制器模型,渲染的形式(只有当它是一个GET请求)前。 然后,你就不需要在所有修改形式。
Answer 2:
你可以很容易地预填充的CheckBoxList与选定的项目,它需要选定的按键阵列在其第二个参数。
$selected_keys = array_keys(CHtml::listData( $model->books, 'id' , 'id'));
echo CHtml::checkBoxList('Author[books][]', $selected_keys, $books);
请在这里看到完整的例子,在我的博客:
http://scriptbaker.com/how-to-make-yii-checkboxlist-selected/
Answer 3:
CHtml::actviceCheckBoxList
(您使用CActiveForm :: CheckBoxList的是包装它)有这样的语法
public static function activeCheckBoxList($model,$attribute,$data,$htmlOptions=array())
如果你想手动设置预先选择的价值观 - 你建议立即进行删除使用了CHtml :: CheckBoxList的,而不是
public static function checkBoxList($name,$select,$data,$htmlOptions=array())
这里是一块了CHtml类参考
* @param string $name name of the check box list. You can use this name to retrieve
* the selected value(s) once the form is submitted.
* @param mixed $select selection of the check boxes. This can be either a string
* for single selection or an array for multiple selections.
* @param array $data value-label pairs used to generate the check box list.
* Note, the values will be automatically HTML-encoded, while the labels will not.
Answer 4:
<?php
$categories = array(1,2,3);
$preSelectedCategories = array(1=>true,2=>true); // use this way
echo CHtml::checkBoxList('category_id',$preSelectedCategories,$categories);
?>
试试这个我已经试过了,它成功运行。
Answer 5:
删除$ preSelectedCategories变量。 设定模型 - $> CATEGORY_ID是保持所选择的复选框的值的数组。
<?php echo $form->labelEx($model,'category_id'); ?>
<?php
$model->category_id = array('value1','value2');
echo $form->checkBoxList($model, 'category_id', $categories, array('multiple'=>true)); ?>
<?php echo $form->error($model,'category_id'); ?>
你应该试试这个,但我没有测试这一点。
Answer 6:
在表单上显示它之前填充一个数组的属性。
在控制器:
public function actionUpdate($id) {
$model=$this->loadModel($id);
//For example
$categories = array(0=>'Option One',1=>'Option Two',2=>'Option Three');
$preSelectedCategories = array(1,2);
//Magic here
$model->category_id = $preSelectedCategories;
if(isset($_POST['NameOfModel']) {
//category_id reset with incoming form data...
}
...
$this->render('update',array('model'=>$model,'categories'=>$categories));
}
在视图中,在您的形式:
echo $form->checkBoxList($model,'category_id',$categories);
因为我修改了它在这里未经测试...改编自引导扩展的表单控件。
Answer 7:
大多数警予成员具有同样的问题,所以这里更甜美代码明确的解释。
首先,你需要找到自己预先选定的类别,如 -
$criteria = new CDbCriteria();
$criteria->select = 'category_id as id';
$criteria->condition = 'userid = :userid';
$criteria->params = array(':userid' => Yii::app()->user->id);
//store pre-selected id into variable - $selected_keys
$selected_keys = array_keys(CHtml::listData(MyCategory::model()->findAll($criteria), 'id', 'id'));
现在整个生成分类列表,比如 -
$list = CHtml::listData(Categories::model()->findAll(array('order'=>'id')), 'id', 'category_name');
//htmlOptions for class and others elements
$htmlOptions = array('template' => '{input}{label}', 'separator'=>'', 'class'=>'in-checkbox', 'multiple'=>true, 'checked'=>'checked');
查看部分 -
<?php echo $form->labelEx($model, 'Category', array('class'=>'col-md-3 control-label')); ?>
<?php $model->Category = $selected_keys; //assign pre-selected list to Category list
echo $form->checkBoxList($model, 'Category', $list, $htmlOptions); ?>
<?php echo $form->error($model, 'Category'); ?>
试试这个,工作的伟大..
文章来源: pre-selected items in CActiveForm->checkBoxList in Yii