我的管理模块正在使用bootstrap:
'admin'=>array(
'preload'=>array('bootstrap'),
'components'=>array(
'bootstrap'=>array(
'class'=>'ext.bootstrap.components.Bootstrap',
),
)
),
但它也使用主站点的错误处理程序:
public function init() {
$this->setImport(array(
'admin.models.*',
'admin.components.*',
));
Yii::app()->setComponents(array(
'errorHandler'=>array('errorAction'=>'site/error'),
));
$this->layout = 'admin';
}
问题在于,当生成错误时,引导程序css正在加载拧紧布局。如何在错误操作中卸载引导程序?
答案 0 :(得分:2)
通常,要卸载组件,您可以使用setComponent
,将第二个参数传递为null
。一个例子:
Yii::app()->getModule('admin')->setComponent('bootstrap', null);
但是在您的情况下,您正在使用的bootstrap-extension版本,在加载组件后已经注册了css / js 1 。因此,即使您卸载组件,仍会包含bootstrap css,仍然会应用ofcourse样式。
但是我们可以删除bootstrap注册的css / js,从而消除bootstrap组件的影响。最简单的方法是重置评论中已经讨论过的clientScript
,clientScript
actionError()
public function actionError() {
if($error=Yii::app()->errorHandler->error) {
Yii::app()->clientScript->reset();
// ... more code ...
}
}
的最佳位置就像register*
一样:
render
为什么这会起作用是因为,视图和布局中会遇到注册css / js的大多数init()
函数,所以在那里注册的任何css / js都会被加载,但是bootstrap将被省略。此外,您可能正在使用的任何小部件仅在if ($this->coreCss !== false)
$this->registerCoreCss();
if ($this->responsiveCss !== false)
$this->registerResponsiveCss();
if ($this->yiiCss !== false)
$this->registerYiiCss();
if ($this->enableJS !== false)
$this->registerCoreScripts();
遇到它们时才会注册其css / js。
1 参见 extensions / bootstrap / components / Bootstrap.php 的{{1}}:
{{1}}
对于扩展的较新版本(自1.0.1版),您必须明确注册css / js。