
Yii Подключение скриптов и стилей в виде пакетов
Если в проекте есть основной сайт, личный кабинет пользователей, отдельная админка для администратора сайта, и ко всему прочему на некоторых страницах необходимо использовать плагины, на других - нет, то можно лего запутаться в расположении подключения файлов. Чтобы этого избежать и иметь возможность лего подключать и отключать необходимые стили и скрипты, можно использовать пакетное подключение в YII. Для этого необходимо в файле конфига main.php в массиве параметров 'clientScript' создать параметр 'packages' и в нем описать необходимые пакеты.
Например, у нас есть главный пакет, в котором будут подключаться основные стили сайта и рабочие скрипты. Назовем этот пакет main, укажем в качестве основного пути корень сайта и пропишем в нем css и js, которые должны подключаться на каждой странице сайта.
'main' => array(
'baseUrl'=>Yii::getPathOfAlias('/'),
'css' => array(
'css/main.css'
),
'js' => array(
'js/main.js'
)
)
И для подключения достаточно на нужном шаблоне просто прописать подключение пакета:
Yii::app()->clientScript->registerPackage('main');
Можно формировать отдельные пакеты как для css, так и для js. Например, определим для личного кабинета пользователей сайта:
'userCss' => array(
'baseUrl'=>Yii::getPathOfAlias('/css/user/'),
'css' => array(
'user.css',
'login.css',
'form.css'
),
),
'userJs' => array(
'baseUrl'=>Yii::getPathOfAlias('/js/user/'),
'css' => array(
'user.js',
),
)
И подключение:
Yii::app()->clientScript->registerPackage('userCss');
Yii::app()->clientScript->registerPackage('userJs');
Можно указывать зависимости для пакетов. Например, мы можем создать отдельный пакет, который содержит в себе все необходимое для jquery. Понятно, что такой пакет нам нужен на каждой странице. Его можно подключать либо через registerPackage в каждом шаблоне, либо указать в параметре 'depends' остальных пакетов, и тогда при подключении последних jquery будет автоматом подтягиваться. Например:
'jquery'=>array(
'baseUrl'=>Yii::getPathOfAlias('/'),
'js'=>array(
'js/jquery.min.js',
'js/jquery-ui.min.js',
),
),
'main' => array(
'baseUrl'=>Yii::getPathOfAlias('/'),
'css' => array(
'css/main.css'
),
'js' => array(
'js/main.js'
),
'depends'=>array('jquery')
)
Подключение этих сриптов в шаблоне без зависимости выглядело бы следующим образом:
Yii::app()->clientScript->registerCoreScript('jquery');
Yii::app()->clientScript->registerPackage('main');
Для пакетов можно указывать и позицию подключения на странице. За это отвечает параметр 'coreScriptPosition'. Он может быть одним из объявленных в CClientScript константов.
CClientScript::POS_HEAD - Скрипт вставляется в секцию head перед эдементом title, используется по умолчанию
CClientScript::POS_BEGIN - Скрипт вставляется в начало секции body
CClientScript::POS_END - Скрипт вставляется в конец секции body
CClientScript::POS_LOAD - Скрипт вставляется в функцию window.onload()
CClientScript::POS_READY - Скрипт вставлется в фугкцию $(document).ready()
Например:
'jquery'=>array(
'baseUrl'=>Yii::getPathOfAlias('/'),
'js'=>array(
'js/jquery.min.js',
'js/jquery-ui.min.js',
),
'coreScriptPosition' => CClientScript::POS_BEGIN
),