猫咪兔 2012-06-12 16:44:58 29568次浏览 21条回复 3 0 0

加载一组checkboxlist(); <?php echo $form->CheckBoxList($model,'subject',$subject)?> 然后进行勾选,之后存入数据库,其中$model是型型,$subject 是对应的数组,key=>value型, 问题: 每勾选一个复选框,在数据库中就加一条记录。也就是说每个用户可以勾选多个,也有多条记录, 当在修改这个页面的时候,我们要怎样将以前勾选的复选框自动打上对勾呢? 也就是 checkbox 的属性:checked=checked 怎样进行判断呢

  • 回复于 2012-06-13 10:20 举报

    CActiveForm也是这样用吧,可以试试。$form->checkBoxList($model,$attribute,$data,$htmlOptions=array())

  • 回复于 2012-06-13 10:36 举报

    呵呵,应该可以的,不过不知道那个listData加在哪儿,我试了很多次,都不行,要么就报错了。。。。。
    等闲了,研究研究

  • 回复于 2012-06-13 10:38 举报

    不好意思,刚看见你的贴子,谢谢你哈,就是按你的这个方法弄好了,不过cactiveForm 里的 checkboxList()方法貌似怎么试都没成功,有时间研究下哈

  • 回复于 2012-06-13 10:49 举报

    加到$data的位置。

  • 回复于 2012-06-13 11:24 举报

    不是的,$data,是生成复选框列表的数组,不是已经先择的,如加到这儿,只会显示已选择的选项,没选择的选项就不会显示了

  • 回复于 2012-06-13 13:34 举报

    我纠结了好久,这个是我在网上找到的一句话:

    checkBoxList

    这是一个checkBox集合组件,使用代码:

    <?php echo $form->checkBoxList($model,'checkBoxList',
    array('1'=>'Football','2'=>'Music','3'=>'Game','4'=>'basketball'),
    array('separator'=>'&nbsp;','labelOptions'=>array('class'=>'checkboxlabel'))
    )?>
    

    这个组件同上,唯一不同的是这个组件是多选的,所以他对应的模型类的属性应该是一个数组。这个组件将你选中的每个checkBox的值构造成一个数组提交服务器端。例如我们选中了Football和Game,那个该组件构造的数组将是array(‘1’,’3’),没有选中的checkBox不会被构造进这个数组中。反之从服务器段读取数组,然后显示该组件也是同样的道理。

    看最后一句话,意思貌似是,checkBoxList本身就有默认的选中....

    然后我测试了一下:

    <?php $model->sort_id = array('1','2') ;?>
    <?php echo $form->checkBoxList($model,'sort_id',Sorts::model()->list); ?>
    

    显示的结果是,第一个和第二个选中了。

    不知道这样是不是个解决办法...

    觉得很赞
  • 回复于 2012-06-13 13:43 举报

    下面这样写应该是没问题的:

    $form->checkBoxList($model,'status',CHtml::listData(array($model),'status','status'))
    

    或者 $form->checkBoxList($model,'status',array('0'=>'a','1'=>'b','2'=>'c')) 其中status是$model的一个属性,就是保存在数据库中的一个值。

  • 回复于 2012-06-13 16:54 举报

    谢谢哈,这样是个方法

  • 回复于 2012-06-13 16:56 举报

    谢谢哈,不过这个方法貌似不是我想要的结果,这样显示的只是我已经勾选的……

  • 回复于 2012-06-14 06:28 举报

    不是的,这样显示是所有的选项以及其中选中的。

  • 回复于 2012-06-14 10:51 举报

    兔兔哇~~其实lilongsy说的是对的,checkBoxList是默认选中的吧....如果$model 里面有对应的属性的值,拿我下面的这句话举例,就是$model对应的sort_id有值,并且这些值在Sorts::model()->list中,checkBoxList会自动选中这些值.....

    你误解lilongsy的意思是因为,你以为他说的 Sorts::model()->list 的值就是$model->sort_id的值....

    <?php echo $form->checkBoxList($model,'sort_id',Sorts::model()->list); ?>

  • 回复于 2012-06-14 13:42 举报

    呵呵,可是$model是什么呢?如果$model是一条记录的AR对象,这是没问题的,可以选中,可是我现在的$model是个数组,findAll的AR结果集,so这样是不行滴

  • 回复于 2012-06-14 14:28 举报

    是结果集不是对象?那为嘛用$form->checkBoxList(),不是该用CHtml::checkBoxList()么...

    就这样吧,反正你目前已经算是解决了。。。等我以后用的时候再看看,我估计马上会用到了。

  • 回复于 2012-08-23 17:52 举报

    $form->checkBoxList($model,'like',array(1=>'篮球',2=>'羽毛球',3=>'音乐')
    在 controller 操作
    $model->like = array(1,2); 即可

    1 条回复
    回复于 2016-08-05 23:14 回复

    这个方法100%解决问题

    , , 觉得很赞
  • 回复于 2012-08-30 23:19 举报

    如果我的$model是post的一个实例,那么应该这样获取值$_POST['Post']['checkBoxList'],它应该是一个数组。
    不过事实上,我得到的是一个array的字符串,这是怎么回事?能帮忙解决一下么

  • 回复于 2012-08-31 11:08 举报

    我没用过,刚测试了一下,不会出现你说的那个情况,我得到的是个数组。

    你也可以测试一下。我是基于我以前的自己的一个小项目测试的。
    在model里面。我定义了一个test,并设置为safe ;

    view里面,echo $form->checkBoxList($model,'test',Sorts::model()->list);//我Sorts::model()->list的值是Array ( [1] => 笑话 [2] => 囧事 [4] => 秘密 )

    Controller里面 $a = $_POST['Stories']['test'] ; print_r($a);exit();

    打印出来的结果是 Array ( [0] => 1 [1] => 2 [2] => 4 )

  • 回复于 2012-08-31 11:14 举报

    嗯确实是得到一个数组。昨晚刷牙的时候想到自己错在哪里了~~哈哈

  • 回复于 2012-09-17 11:29 举报

    刚好用到,谢谢了

  • 回复于 2012-11-09 06:29 举报

    我刚刚搞得这个问题,你要是存储了多条记录当然不行啊!这说明你存储不对,你应该先系列化再储存,取出来时反系列化,这样你原来选上的就可以恢复

  • 回复于 2012-11-09 09:28 举报

    这个问题很简单啊 读出来还原成数组就行了

您需要登录后才可以回复。登录 | 立即注册