Php 在Yii中呈现CGridView中的小部件
我正在使用Yii框架,我遇到了一个问题。我在扩展文件夹中创建了一个小部件,并试图在CGridView中呈现我的小部件。部分代码(我的网格)如下所示:Php 在Yii中呈现CGridView中的小部件,php,yii,widget,Php,Yii,Widget,我正在使用Yii框架,我遇到了一个问题。我在扩展文件夹中创建了一个小部件,并试图在CGridView中呈现我的小部件。部分代码(我的网格)如下所示: 'columns'=>array( 'id', 'name', array( 'type' => 'raw', 'value' => $this->widget('application.extensions.jalali.gregorian2jalali',array()) ), 它在运行时给我以下错
'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
问题出在哪里 将列指定为数组时,它将用于创建网格列实例,其中“class”元素指定列类名称(如果不存在,则默认为CDATA列)。目前,提供了以下官方列类:CDATA列、CLinkColumn、CButtonColumn和CCheckBoxColumn and value in:将使用evaluateExpression对每个数据单元求值的PHP表达式,其结果将作为数据单元的内容呈现。在此表达式中,可以使用以下变量: $row行数(从零开始)。 $data行的数据模型。 $this是列对象。 PHP表达式可以是任何具有值的PHP代码。要了解有关表达式的更多信息,请参阅
只是复制粘贴它 将列指定为数组时,它将用于创建网格列实例,其中“class”元素指定列类名称(如果不存在,则默认为CDATA列)。目前,提供了以下官方列类:CDATA列、CLinkColumn、CButtonColumn和CCheckBoxColumn and value in:将使用evaluateExpression对每个数据单元求值的PHP表达式,其结果将作为数据单元的内容呈现。在此表达式中,可以使用以下变量: $row行数(从零开始)。 $data行的数据模型。 $this是列对象。 PHP表达式可以是任何具有值的PHP代码。要了解有关表达式的更多信息,请参阅
只是复制粘贴它 值指定不正确,它必须是如下所示的字符串:
'value' => '$this->grid->controller
->widget("ext.jalali.gregorian2jalali",array(),true)'
值指定不正确,它必须是如下所示的字符串:
'value' => '$this->grid->controller
->widget("ext.jalali.gregorian2jalali",array(),true)'
和中的可选渲染小部件 尝试将小部件推入如下函数 e、 g:在Post模型(Post.php文件)中,创建一个名为
gregorian2jalali()的新函数
然后在视图中:
'columns'=>array(
'id',
'name',
array(
'type' => 'raw',
'value' => "Post::gregorian2jalali()"
),
和中的可选渲染小部件
尝试将小部件推入如下函数
e、 g:在Post模型(Post.php文件)中,创建一个名为gregorian2jalali()的新函数
然后在视图中:
'columns'=>array(
'id',
'name',
array(
'type' => 'raw',
'value' => "Post::gregorian2jalali()"
),
我也在想同样的问题,并发现了以下适合我的作品:
<?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',
),
),
)); ?>
我也在想同样的问题,并发现了以下适合我的作品:
<?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',
),
),
)); ?>
无法从模型访问小部件的可能副本的可能副本。你的意思是我必须在模型文件夹中创建文件吗?该小部件无法从模型访问。你的意思是我必须在model文件夹中创建文件吗?尝试用$this->grid->controller
替换$this
,并向小部件添加第三个参数true
。请参见上面的编辑。此外,访问扩展库的默认点符号是ext.
而不是application.extensions.
。忽略最后一条注释,我使用ext.
别名作为扩展名<代码>应用程序.扩展。
有效,我测试它是因为我对自己有点不确定。尝试用$this->grid->controller
替换$this
,并向小部件添加第三个参数true
。请参见上面的编辑。此外,访问扩展库的默认点符号是ext.
而不是application.extensions.
。忽略最后一条注释,我使用ext.
别名作为扩展名<代码>应用程序.扩展。
有效,我测试了它,因为我对自己有点不确定。