CTabView (или CJuiTabs) не отображаются корректно

Привет, моя проблема в том, что когда я пытюась загрузить содержимое виджета CTabView или CJuiTabs в CJuiDialog используя ajax, это не работает, все HTML тэги впорядке, но JS и CSS нету.

это view:


$this->beginWidget('zii.widgets.jui.CJuiDialog', array(

    'id'=>'mydialog',

    'options'=>array(

        'width'=>500,

        'height'=>500,

        'title'=>'View order',

        'autoOpen'=>false,

    ),

));


    echo 'dialog content here';


$this->endWidget('zii.widgets.jui.CJuiDialog');


echo CHtml::link('open dialog', '#', array(

   'onclick'=>'$("#mydialog").load("/admin/orders/getorder/id/1").dialog("open"); return false;',

));



controller:


public function actionGetOrder()

        {

        $orderId = $_GET['id'];

        $order = Order::model()->with('goods')->findByPk($orderId);

                

        if ($order!==null) $this->renderPartial('_orderForm',array('order'=>$order));

        else echo 'Wrong order ID';

                

        }

_orderForm view:


<?php $this->widget('CTabView', array(

        'viewData'=>array('order'=>$order),

    'tabs'=>array(

        'tab1'=>array(

                'title'=>'Order',

                'view'=>'_orderDetails'

        ),

        'tab2' => array(

                 'title'=>'Cart',

                 'content'=>'Content',

        ),

    ),


));

Думаю проблема в том, что renderPartial не вставляет CSS & JS файлы принадлежащие CTabView или CJuiTabs в layout. Я прав? Как решить эту проблему?

Цель: создать CJuiDialog окно, которое при открытии бы заполнялось CTabView с нужным содержимым из аякс запроса.

Я не когда не работал с этим виджетом, но…

Вы задаёте ID всему диалогу. А загружать нужно в какой-то внутренний блок


$this->beginWidget('zii.widgets.jui.CJuiDialog', array(

    'id' => 'mydialog',

Что-то нужно вроде такого… .content - класс "сожержимого" диалога


echo CHtml::link('open dialog', '#', array(

   'onclick'=>'$("#mydialog div.content").load("/admin/orders/getorder/id/1").dialog("open"); return false;',

));

Сильно не пинайте если неправильно, я не дома, проверить не могу…

Тут получается ID как раз только содержимого диалога… так что не поможет.

renderPartial совсем не использует layout это раз.

core скрипты вставляются в <head>, которого нет.

Самый простой способ, это в основном сценарии (которое отображается через render()) сделать так:

Для CTabView




        $cs = Yii::app()->clientScript;

        $cs->registerCoreScript('yiitab');

        CTabView::registerCssFile();



2 Werewolf

Да я так сделал, CTabView::registerCssFile(). Тут понятно.

Но надо вызвать $tabview->registerClientScript(), я ведь динамически на страницу добавляю объяет (CTabView) с ID каким то, и надо потом к нему применить скрипт .yiitab()…

Дак вот как это сделать?

Т.е.

  1. Нажимаем на ссылку

  2. Начинает открываться диалоговое окно CJuiDialog

  3. Подгружается аяксом CTabView widget с ID например "ordertab"

  4. После загрузки аякса должен вызваться скрипт $("#ordertab").yiitab()

Как реализовать вот такое примерно поведение?

Спасибо всем знатокам :huh: