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);
}