1

如何在 Yii 的 CJuiTabs 中将小部件的输出作为内容传递?

这是我尝试并得到错误的代码:

$this->widget('zii.widgets.jui.CJuiTabs',array(
'tabs'=>array(
    'Tab1'=> array('content' => $this->widget('zii.widgets.CListView', array(
        'dataProvider'=>$vulnerdataProvider,
        'itemView'=>'_latest_vulner' )),
        'id' => 'tab1'),
    'tab2'=>array('content'=>'Content for tab 2', 'id'=>'tab2'),
),
// additional javascript options for the tabs plugin
'options'=>array(
    'collapsible'=>true,
),

));

它给出了这个错误:

类 CListView 的对象无法转换为字符串

编辑:除了斯图的回答,我发现了这个:http: //yiibook.blogspot.nl/2012/09/handle-cjuitabs-in-yii.html

4

3 回答 3

2

是的,内容需要一个字符串,而小部件不返回字符串。我在这里找到了这篇博文:http: //mrhandscode.blogspot.com/2012/03/insert-widget-to-another-widget-in-yii.html

所有者找到了一种非常创新的方法来解决这个问题,使用输出缓冲来收集一个小部件的输出,然后将其插入到第二个小部件中。

您可能可以通过以下方式实现它:

ob_start();
$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$vulnerdataProvider,
    'itemView'=>'_latest_vulner'
));
$tab1Content=ob_get_contents();
ob_end_clean();

$this->widget('zii.widgets.jui.CJuiTabs',array(
    'tabs'=>array(
        'Tab1'=> array('content' => $tab1Content,'id' => 'tab1'),
        'tab2'=>array('content'=>'Content for tab 2', 'id'=>'tab2'),
    ),
    // additional javascript options for the tabs plugin
    'options'=>array(
        'collapsible'=>true,
    ),
));

我没有测试过,可能需要修补!

于 2013-01-04T18:24:51.483 回答
1

您可以将 $this->widget() 的第二个参数设置为 true,因此该方法将返回小部件的内容而不是回显它。

$this->widget('zii.widgets.jui.CJuiTabs',array(
'tabs'=>array(
    'Tab1'=> array('content' => $this->widget('zii.widgets.CListView', array(
        'dataProvider'=>$vulnerdataProvider,
        'itemView'=>'_latest_vulner' ), true),
        'id' => 'tab1'),
    'tab2'=>array('content'=>'Content for tab 2', 'id'=>'tab2'),
),
// additional javascript options for the tabs plugin
'options'=>array(
    'collapsible'=>true,
),
于 2013-09-09T20:12:20.350 回答
0

下面没问题。

'Tab1'=> array('content' => $this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$vulnerdataProvider,
    'itemView'=>'_latest_vulner' ), true)
于 2014-02-15T03:48:06.787 回答