1

私は2つの配列を持っています。1 つは$categoriesで、データベースから取得したすべてのカテゴリを含み、もう 1 つは$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を使用することです。

4

7 に答える 7

4

他の人が提案したように、 1つのオプションはCHtml::activeName、入力に適切な名前を取得してに渡すために使用するCHtml::checkBoxListことです。

私の意見では、より適切な別のオプションは、category_idフォームをレンダリングする前に、事前にチェックしたい s をコントローラーのモデルに追加することです (GET 要求の場合のみ)。その後、フォームをまったく変更する必要はありません。

于 2012-05-15T05:00:50.003 に答える
2

選択した項目を checkBoxList に簡単に事前入力できます。2 番目のパラメーターで選択したキーの配列を受け取ります。

$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/

于 2013-03-07T11:22:25.000 に答える
1
<?php 
$categories = array(1,2,3);
$preSelectedCategories = array(1=>true,2=>true); // use this way 
echo CHtml::checkBoxList('category_id',$preSelectedCategories,$categories); 
?>

私が試したこれを試してみてください、それは正常に実行されます。

于 2012-05-14T05:37:43.993 に答える
1

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.
于 2012-05-14T05:14:30.323 に答える
1

$preSelectedCategories 変数を削除します。$model->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'); ?>

これを試す必要がありますが、私はこれをテストしていません。

于 2012-05-15T10:44:03.390 に答える
1

フォームに表示する前に、属性に配列を設定します。

コントローラーで:

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

ここで変更したため未テスト... Bootstrap 拡張機能のフォーム ウィジェットから適応。

于 2012-06-15T09:41:34.713 に答える