Уфа

ул. Лесной проезд 6/5,

Офис 6.

+7 (906) 102-95-68

ул. Лесной проезд 6/5, Офис 6.

tel
Главная Стрелка вправо Блог Стрелка вправо Yii Подключение скриптов и стилей в виде пакетов

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
),