我想在全球範圍內註冊用戶腳本,以便遍佈整個網站。現在,我插入的每一個動作在我的控制器:全球註冊ClientScript的最佳方式?
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js');
但實際上據我所知,這不是好辦法...
我想在全球範圍內註冊用戶腳本,以便遍佈整個網站。現在,我插入的每一個動作在我的控制器:全球註冊ClientScript的最佳方式?
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js');
但實際上據我所知,這不是好辦法...
如果你期待着使用主題在你的項目中,我會放一些CSS和佈局文件腳本(的意見/佈局/我的佈局,file.php)。因爲如果你改變了主題,你將會使用另一個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'。
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/
你可以這樣做:具有路徑保護/組件啓動初始化函數在基控制器類/controller.php
public function init()
{
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js');
parent::init();
}
註冊全球js和css文件,我認爲是註冊他們beforeRender()方法(而不是在beforeAction()的最好方法 - 因爲如果你渲染JSON或XML這可能會破壞你的結構)的一些BaseController。
這是一個錯誤的選擇!最好在beforeRender – realtebo 2013-05-10 18:49:23
上這樣做哦,這聽起來很像,看起來更準確!謝謝@realtebo – 2013-05-11 07:33:01