【问题标题】:Render a widget inside CGridView in Yii在 Yii 的 CGridView 中渲染一个小部件
【发布时间】:2013-10-19 10:51:51
【问题描述】:

我正在使用 Yii 框架,但我遇到了问题。我在扩展文件夹中创建了一个小部件,并尝试在 CGridView 中呈现我的小部件。部分代码(我的网格)是这样的:

'columns'=>array(
'id',
'name',
array(
    'type'  => 'raw',
    'value' =>  $this->widget('application.extensions.jalali.gregorian2jalali',array())
),

运行时出现以下错误:

Error 500
call_user_func_array() expects parameter 1 to be a valid callback, no array or string given

问题出在哪里?

【问题讨论】:

标签: php yii widget


【解决方案1】:

值指定错误,它需要是这样的字符串:

'value' =>  '$this->grid->controller
     ->widget("ext.jalali.gregorian2jalali",array(),true)'

【讨论】:

  • 尝试将$this 替换为$this->grid->controller,并向小部件添加第三个参数true。请参阅上面的修改。
  • 另外,获取扩展库的默认点符号是ext.而不是application.extensions.。
  • 忽略最后一条评论,我使用 ext. 别名作为扩展名。 application.extensions. 有效,我测试了它,因为我有点不确定自己。
【解决方案2】:

GridView 和 CGridColumn 中的替代渲染小部件 尝试将小部件推送到类似

的函数中

例如:在 Post 模型(Post.php 文件)中,创建一个名为 gregorian2jalali() 的新函数

public static function gregorian2jalali(){
 return $this->widget('application.extensions.jalali.gregorian2jalali',array());
}

然后在视图中:

'columns'=>array(
'id',
'name',
array(
    'type'  => 'raw',
    'value' =>  "Post::gregorian2jalali()"
),

【讨论】:

  • 无法从模型访问小部件。你的意思是我必须在模型文件夹中创建文件吗?
【解决方案3】:


我想知道同样的事情,并为我找到了以下作品:

    <?php $this->widget('bootstrap.widgets.TbGridView',array(
         'type'=>'striped bordered condensed',
         'id'=>'jugada-grid',
         'dataProvider'=>$model->search(),
         'filter'=>$model,
         'columns'=>array(
            'id',
            'nombre',
            'descripcion',
            array(
                    'name'  => 'animacion',
                    'header'=> 'Animación',
                    'type' => 'raw',
                    'value'=> "Yii::app()->controller->widget('bootstrap.widgets.TbButton', array(
                    'label'=>'Campo',
                    'type'=>'primary',
                    'htmlOptions'=>array(
                        'id' => 'activate-field',
                        'data-toggle'=>'modal',
                        'data-target'=>'#field-popup',
                    ),
                ),true)",
            ),
            array(
                'class'=>'bootstrap.widgets.TbButtonColumn',
            ),
    ),
)); ?>

请注意,该示例基于 Yii Bootstrap 扩展的小部件。
注意 Yii::app()->controller->widget... 包裹在 ".

【讨论】:

    【解决方案4】:

    当列被指定为数组时,它将用于创建网格列实例,其中“类”元素指定列类名称(如果不存在则默认为 CDataColumn)。目前官方提供了这些列类:CDataColumn、CLinkColumn、CButtonColumn和CCheckBoxColumn。

    http://www.yiiframework.com/doc/api/1.1/CGridView#columns-detail

    和CDataColumn 中的值:一个 PHP 表达式,将使用 evaluateExpression 对每个数据单元进行评估,其结果将呈现为数据单元的内容。在此表达式中,您可以使用以下变量: $row 行号(从零开始)。 $data 该行的数据模型。 $this 列对象。 PHP 表达式可以是任何具有值的 PHP 代码。要详细了解什么是表达式,请参阅php manual。

    复制粘贴即可!

    【讨论】:

      猜你喜欢
      • 2014-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多