динамически добавлять вкладку в виджет YiiBooster TbTabs

Я создал 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')
));?>

person Abdullah Shaikh    schedule 29.11.2012    source источник


Ответы (3)


Его нет, но это не значит, что вы не можете создать его самостоятельно.

Просто передайте часть «вкладки» через ваш контроллер, примерно так:

в вашем контроллере:

$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')
));?>
person ThomasVdBerge    schedule 30.11.2012
comment
но я хотел динамические вкладки на стороне клиента. Я обновил свой вопрос. Ваш подход хорош для серверной части. Принятие :) - person Abdullah Shaikh; 01.12.2012

Добавьте ссылку на новую вкладку в заголовок, добавьте новую вкладку, отобразите новую вкладку

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

Примечание. YiiBooster автоматически генерирует идентификатор элемента, вам необходимо использовать соответствующие селекторы jquery.

person Abdullah Shaikh    schedule 01.12.2012
comment
@ Пожалуйста, взгляните на эту ссылку stackoverflow.com/questions/20700642/ можем ли мы создать эту структуру вкладок в YiiBooster - person Silviaa; 10.03.2014

Я не думаю, что это хорошая практика для рендеринга включенных представлений внутри контроллера.

Я нашел, что это работает для меня в представлении:

$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" существовал...

person DerekC    schedule 08.02.2013