我正在使用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
问题来自哪里?
答案 0 :(得分:3)
值指定不正确,它必须是这样的字符串:
'value' => '$this->grid->controller
->widget("ext.jalali.gregorian2jalali",array(),true)'
答案 1 :(得分: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()"
),
答案 2 :(得分:2)
我想知道同样的事情,并为我找到了以下作品:
<?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() - &gt; controller-&gt;小部件...包装在“。
中答案 3 :(得分:0)
当列被指定为数组时,它将用于创建网格列实例,其中“class”元素指定列类名称(如果不存在,则默认为CDataColumn)。目前,提供了这些官方列类:CDataColumn,CLinkColumn,CButtonColumn和CCheckBoxColumn。
http://www.yiiframework.com/doc/api/1.1/CGridView#columns-detail
和CDataColumn中的值:将使用evaluateExpression为每个数据单元计算的PHP表达式,其结果将呈现为数据单元格的内容。在此表达式中,您可以使用以下变量: $ row行号(从零开始)。 $ data行的数据模型。 $ this列对象。 PHP表达式可以是具有值的任何PHP代码。要了解有关表达式的更多信息,请参阅php manual。
只是复制粘贴它!