【问题标题】:Yii - Widgets - ExplanationYii - 小部件 - 解释
【发布时间】:2012-10-02 08:47:47
【问题描述】:

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

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

我想知道的是小部件数组中每个可用选项的详细信息,例如“属性”、“模型”和“数据”代表什么,因为我无法从文档中理解它。

【问题讨论】:

    标签: yii


    【解决方案1】:

    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' 的字段)

    【讨论】:

    • 如果我想在 $data 中添加数据库中的数据怎么办?
    • 为此您可以使用 CHtml::listData(),我已经更新了我的答案,为您提供了一些相关信息。
    • 我已经做到了。现在我在扩展调用中遇到错误:别名“ext.multiSelect.JMultiSelect”无效。确保它指向一个现有的 PHP 文件。
    • 318 throw new CException(Yii::t('yii','Alias "{alias}" 无效。确保它指向一个现有的 PHP 文件。',array('{alias} '=>$alias)));
    • 您之前没有收到此错误吗?有点奇怪,您是否更改了任何文件的位置?
    【解决方案2】:
      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'); ?>
    

    【讨论】:

      猜你喜欢
      • 2013-04-27
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      相关资源
      最近更新 更多