YII: Как зарегистрировать активы виджета yiiwheels без вызова виджета

Я использую Yiiwheels. Я хочу изменить поле со списком, чтобы выбрать 2 виджета, но соответствующие активы еще не загружены. Уродливое решение - создать фиктивный элемент select2 в скрытом диапазоне, поэтому ресурсы загружаются автоматически. но есть ли лучший способ сделать это, я имею в виду функцию для загрузки активов виджета?

1 ответ

Решение

Функция, которую вы ищете, это registerClientScript() функция в WhSelect2 класс виджетов в Yiiwheels.

Хотя создание пустого виджета - это самый простой способ зарегистрировать скрипт, вы можете вызвать его напрямую, например, так:

<?php Yii::import('yiiwheels.widgets.select2.WhSelect2');
    $w = new WhSelect2(); 
    $w->registerClientScript();
?>

registerClientScript() функция вызывается в init() вызов во время создания виджета, следующие операции выполняются этой функцией. Полный код смотрите в WhSelect2 на github.

   /**
    * Registers required client script for bootstrap select2. It is not used through bootstrap->registerPlugin
    * in order to attach events if any
    */
    public function registerClientScript()
    {
        /* publish assets dir */
        $path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'assets';
        $assetsUrl = $this->getAssetsUrl($path);

        /* @var $cs CClientScript */
        $cs = Yii::app()->getClientScript();

        $cs->registerCssFile($assetsUrl . '/css/select2.css');
        $cs->registerScriptFile($assetsUrl . '/js/select2.js');


        if ($this->language) {
            $cs->registerScriptFile(
                $assetsUrl . '/js/locale/select2_locale_' . $this->language . '.js',
                CClientScript::POS_END
            );
        }

        /* initialize plugin */
        $selector = '#' . TbArray::getValue('id', $this->htmlOptions, $this->getId());

        $this->getApi()->registerPlugin('select2', $selector, $this->pluginOptions, CClientScript::POS_READY);
        $this->getApi()->registerEvents($selector, $this->events, CClientScript::POS_READY);
    }
Другие вопросы по тегам