在CActiveForm->的CheckBoxList预先选择项的Yii(pre-select

2019-09-17 04:54发布

我有两个数组。 一个是包含我的数据库检索到的所有类别$类别 ,另一个是$其中包含需要的类别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