Yii - Widgets - 解释

时间:2012-10-02 08:47:48

标签: yii

我正在尝试使用下拉列表小部件:

  $this->widget('ext.multiselect.JMultiSelect',array(
      'model'=>$model,
      'attribute'=>'attribute',
      'data'=>$data,
      // additional javascript options for the MultiSelect plugin
      'options'=>array()
));

我想知道的是,小部件数组中可用的每个选项的详细信息类似于'属性','模型'和数据'代表,因为我无法理解它构成文档。

2 个答案:

答案 0 :(得分:3)

model参数是您为其创建多重选择的模型。

attribute是您要为其创建多重选择的模型属性。

data是要在多重选择中显示的列表项的键/值对数组。

例如,如果您有一个模型“用户”,并且在该模型中您有一个字段'access_rights',并且您希望将该字段作为具有少量值的多选框,则可能会执行以下操作:

在您的控制器中:

$model = new User;

$data = array(
    'admin_area'=>'Admin Area Access',
    'product_area'=>'Product Area Access',
    'customer_area'=>'Customer Area Access',
    ... etc
);

在您的视图文件中的表单中:

$this->widget('ext.multiselect.JMultiSelect',array(
    'model'=>$model,
    'attribute'=>'access_rights',
    'data'=>$data,
    // additional javascript options for the MultiSelect plugin
    'options'=>array()
));

编辑:

要从另一个模型向多选选项添加数据,您可以使用CHtml::listData()方法,这会获取一个活动记录结果集并将其转换为键/值对数组,以便您可以在任何一个中使用需要键/值对的其他CHtml方法。要做到这一点,您只需使用活动记录从数据库中获取您所追踪的记录,例如;

$myData = Data::model->findAll();

然后你可以把它放到listData()方法中,它会创建你的数组:

$this->widget('ext.multiselect.JMultiSelect',array(
    'model'=>$model,
    'attribute'=>'access_rights',
    'data'=>CHtml::listData($myData, 'id', 'name'),
    // additional javascript options for the MultiSelect plugin
    'options'=>array()
));

(其中'id'和'name'是模型表中您希望成为数组中'key'和'value'的字段)

答案 1 :(得分:0)

  echo $form->dropDownList($model, 'category', CHtml::listData(TblCategory::model()->findAll(),
                'id', 'category_name'), array('empty' => '---Select Category---', 
                     'style' => 'width:350px;')), array() ?>

        <?php echo $form->error($model, 'category'); ?>