我想在全球范围内注册用户脚本,可用在所有的部位。 现在,我插在我的控制器的每一个动作:
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js');
但实际上据我所知,这不是好办法...
我想在全球范围内注册用户脚本,可用在所有的部位。 现在,我插在我的控制器的每一个动作:
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js');
但实际上据我所知,这不是好办法...
如果你正期待着在你的项目中使用的主题,我会把在布局文件( 意见/布局/我的布局-file.php)一些CSS和脚本。 因为如果你改变主题,你将使用另一个CSS,也许有时另一个脚本,这样你就不会想它混合在一起。
但是一些主要的CSS和scipts,那没有翻过的主题改变,我会把在主控制器 (保护/组件/ Controller.php这样)和所有其他控制器(/保护/控制器/)将扩展此类控制器
class PageController extends Controller {
所以,如果使用的父类所有的控制器,您可以编辑刚刚父类,并添加这样的事
public function beforeRender( $view ) {
...
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js');
...
return true;
}
和你的所有行动将现在使用相同的脚本。
编辑 :@realtebo(在评论)指出,使用“ beforeRender ”而不是“beforeAction”。
查看更多: 了解视图渲染流
你可以这样做:具有路径保护/组件/ Controller.php这样启动初始化函数在基控制器类
public function init()
{
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js');
parent::init();
}
最好的办法注册全球js和css文件,我认为是他们注册在beforeRender()方法(而不是在beforeAction() - 因为如果你渲染JSON或XML这可能会破坏你的结构)的一些BaseController的。
U可以这样做:1.创建私有属性$ _assetsUrl; 2.然后将模块或控制器在
public function getAssetsUrl()
{
if ($this->_assetsUrl===null)
{
$assetsPath = $this->basePath.DIRECTORY_SEPARATOR.'assets';
$this->_assetsUrl = Yii::app()->assetManager->publish($assetsPath,false,-1,YII_DEBUG);
if (Yii::app()->theme!==null && is_dir($assetsPath.DIRECTORY_SEPARATOR.Yii::app()->theme->name))
$this->_assetsUrl .= DIRECTORY_SEPARATOR.Yii::app()->theme->name;
}
return $this->_assetsUrl;
}
希望这是有益的,也看到这个链接http://www.yiiframework.com/wiki/148/understanding-assets/