在YiiBooster TbTabs小部件中动态添加选项卡

时间:2012-11-29 14:28:41

标签: php yii yii-extensions

我已经创建了bootstrap.widgets.TbTabs,如何在客户端动态添加新选项卡。是否存在任何可以添加新标签的事件,就像下面代码中的“显示”事件一样。

<?php $this->widget('bootstrap.widgets.TbTabs', array(
    'id' => 'mytabs',
    'type' => 'tabs',
    'tabs' => array(
            array('id' => 'tab1', 'label' => 'Tab 1', 'content' => $this->renderPartial('tab1', null, true), 'active' => true),
            array('id' => 'tab2', 'label' => 'Tab 2', 'content' => 'loading ....'),
            array('id' => 'tab3', 'label' => 'Tab 3', 'content' => 'loading ....'),
    ),
    'events'=>array('shown'=>'js:loadContent')
));?>

3 个答案:

答案 0 :(得分:1)

没有,但这并不意味着你不能自己创造它。

只需通过控制器传递“标签”部分,如下所示:

控制器中的

$tabs => array(
        array('id' => 'tab1', 'label' => 'Tab 1', 'content' => $this->renderPartial('tab1', null, true), 'active' => true),
        array('id' => 'tab2', 'label' => 'Tab 2', 'content' => 'loading ....'),
        array('id' => 'tab3', 'label' => 'Tab 3', 'content' => 'loading ....'),
);

$this->render('pageName', array('tabs' => $tabs));

视图

<?php $this->widget('bootstrap.widgets.TbTabs', array(
    'id' => 'mytabs',
    'type' => 'tabs',
    'tabs' => $tabs,
    'events'=>array('shown'=>'js:loadContent')
));?>

如果要在主布局中实现类似的功能,可以创建一个从CActiveRecord扩展的模型,并将选项卡存储在数据库中。之后,您可以在模型类中使用静态方法来调用和检索选项卡。然后在布局视图中,您可以执行以下操作:

<?php $this->widget('bootstrap.widgets.TbTabs', array(
    'id' => 'mytabs',
    'type' => 'tabs',
    'tabs' => Model::getTabs(),
    'events'=>array('shown'=>'js:loadContent')
));?>

答案 1 :(得分:1)

在标题中添加新标签链接,添加新标签,显示新标签

$('#tabHeaders').append($('<li><a href="#newtab">New Tab</a></li>'));
$('#tabContent').append($('<div class="tab-pane" id="newtab"></div>'));
$('#newtab').tab('show');

注意YiiBooster自动生成元素id,需要使用适当的jquery选择器

答案 2 :(得分:1)

我认为将控制器中包含的视图渲染为一个很好的做法。

我认为这在我看来对我有用:

$this->widget('bootstrap.widgets.TbTabs', array(
    'type'=>'tabs',
    'tabs'=>array(
        array( //
            'label'=>'Comments ('.$model->commentCount.')',
            'content'=>$this->renderPartial( '_comments', array( 'model'=>$model ), true ),
        ),
    )
));

显然,要实现这一点,你需要“_comments.php”存在......