Yii 全局注册ClientScript的最佳方式?
我想在全球范围内注册用户脚本,使其在整个网站上都可用。现在,我在控制器中的每个操作中插入:Yii 全局注册ClientScript的最佳方式?,yii,Yii,我想在全球范围内注册用户脚本,使其在整个网站上都可用。现在,我在控制器中的每个操作中插入: Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js'); 但我真的明白这不是个好办法…你可以这样做: 1.创建私有属性$\u assetsUrl; 2.然后在模块或控制器中 public function getAssetsUrl() { if ($this->
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js');
但我真的明白这不是个好办法…你可以这样做:
1.创建私有属性$\u 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;
}
希望这是有用的,另请参见此链接。您可以这样做:在具有路径保护的/components/controller.php的基本控制器类中启动init函数
public function init()
{
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js');
parent::init();
}
如果您希望在项目中使用主题,我会在布局文件(views/layouts/my layout file.php)中放置一些css和脚本。因为如果你改变主题,你将使用另一个css,有时可能是另一个脚本,所以你不想把它混合在一起 但是一些主要的css和SCIPT并没有改变accross主题,我会把它们放在mainController(protected/components/Controller.php) 所有其他控制器(/protected/controllers/)都将扩展该类控制器
class PageController extends Controller {
所以,若你们的所有控制器都在父类上使用,你们可以只编辑父类并添加如下内容
public function beforeRender( $view ) {
...
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js');
...
return true;
}
现在,您的所有操作都将使用相同的脚本
编辑:@realtebo(在评论中)指出在采取行动之前使用“而不是”
查看更多信息:我认为注册全局js和css文件的最佳方法是在某个BaseController的beforeRender()方法(而不是beforeAction()-因为如果渲染json或xml,这可能会破坏您的结构)中注册它们。哦,这听起来更准确!谢谢@realtebo