我使用Yii框架已经有一段时间了,我真的玩得很开心,尤其是使用这些让开发更容易的小部件。我正在使用Yii bootsrap进行扩展。。但我在理解每个小部件的工作原理时遇到了一点困难。
我的问题是如何在选项卡中显示小部件,比如TbDetailView?我基本上想以选项卡形式显示内容。。然而,其中一些是表格形式的。。。一些在列表、详细视图等中
我有这个小部件:
$this->widget('bootstrap.widgets.TbDetailView',array(
'data'=>$model,
'attributes'=>$attributes1,
));
我想放在一个标签里
$this->widget('bootstrap.widgets.TbWizard', array(
'tabs' => $tabs,
'type' => 'tabs', // 'tabs' or 'pills'
'options' => array(
'onTabShow' => 'js:function(tab, navigation, index) {
var $total = navigation.find("li").length;
var $current = index+1;
var $percent = ($current/$total) * 100;
$("#wizard-bar > .bar").css({width:$percent+"%"});
}',
),
我的$tab数组声明如下:
$tabs = array('studydetails' =>
array(
'id'=>'f1study-create-studydetails',
'label' => 'Study Details',
'content' =>//what do i put here?),
...
...);
当我将小部件存储在一个变量中时,比如$table=$this->小部件('boots….);并使用$table变量作为'content'参数,我会得到一条错误消息,如下所示:类TbDetailView的对象无法转换为字符串
我似乎不太明白这是怎么回事。。。我需要帮助。。感谢:)
您可以直接在内容中使用renderPartial(),如下所示:
'content'=>$this->renderPartial('_tabpage1', [] ,true),
现在yii将尝试呈现一个名为"_tabpage1.php"的文件,该文件应该与呈现向导的视图位于同一文件夹中。必须返回renderPartial生成的内容,而不是直接渲染它,因此将第3个参数设置为true。
widget()函数使用的第三个参数用于将输出捕获到一个变量中,就像您尝试的那样
来自文档:
public mixed widget(string $className, array $properties=array ( ), boolean $captureOutput=false)
$this->widget('class', array(options), true)
现在,您正在捕捉变量中的对象本身,试图回声出对象。Echo只适用于可以转换为字符串的内容。