В конфиге main.php:
'clientScript'=>array(
'coreScriptPosition'=>CClientScript::POS_END,
'packages'=>array(
'jquery'=>array(
'baseUrl'=>'/themes/classic/js/',
'js'=>array('jquery.min.js'),
),
'bootstrap'=>array(
'baseUrl' => '/themes/classic/plugins/bootstrap/',
'js'=>array('js/bootstrap.min.js'),
'css' => array('css/reset.css','css/bootstrap.css'),
'depends'=>array('jquery'),
),
'theme'=>array(
'baseUrl' => '/themes/classic/',
'js'=>array('js/site.js'),
'css' => array('css/style.css'),
'depends'=>array('jquery','bootstrap'),
),
В самом часто-употребляемом контроллере:
public function beforeAction($action) {
if(parent::beforeAction($action) ) {
Yii::app()->clientScript->registerPackage('theme');
return true;
}
return false;
}
public function actionQuickview() {
$this->layout = 'blank';
$id = Yii::app()->request->getParam('id',0);
//$this->disableScript(array('quickview')); // В идеале как-то тут отключить подключение THEME package
$product = Goods::model()->findByPk($id);
if($product) {
$this->render('_goods_quickview',array('product'=>$product));
} else {
throw new CHttpException(404,'Страница ошибки 404');
}
Yii::app()->end();
}
Подключать основные скрипты сайта в контроллере очень удобно, не надо в каждом layout писать наборы пакетов, которые используются на всем сайте.
1. Можно ли в определенном Action отключить какие-либо пакеты на выбор, указанные в beforeAction ?
2. Если нельзя выполнить 1 пункт, можно ли ограничить использование пакетов в Action того же контроллера, отвечающим за Ajax загрузку данных. Очень не удобно, когда после аджакс загрузки данных подгружаются все пакеты указанные в beforeAction повторно.