2013-01-02 31 views
3

我有很多的,包括CSS文件的地方水木清華這樣有沒有什麼辦法補充版本版本號爲所有包括CSS文件

$cs->registerScriptFile($cs->getCoreScriptUrl() . '/js/jquery/jquery.cookie.js'); 

,我有一個恆定的版本構建,至極是後遞增每次提交。有什麼辦法增加

?v=VERSION-BUILD 

參數有關的所有腳本註冊,不要硬編碼,或者重寫警予的lib?

+0

不太喜歡這個框架,但做了一個快速搜索我看到Yii有一個[資產經理](http://www.yiiframework.com/wiki/148/understanding-assets/#hh3)似乎處理這個...如果使用Gii,可能還有其他功能? – ficuscr

回答

4

個人而言,爲了我自己的目的,我擴展了CClientScript類,使它爲每個腳本和css添加了獨特的參數。它可以很容易地改進,以適應您的需求。

我準備了一個未經測試的簡單版本的這個組件。我們的想法是要覆蓋CClientScript的render()方法,任何腳本文件呼應之前被稱爲:

class ClientScript extends CCLientScript 
{ 

public $version=1; 

public function render(&$output) 
{ 
    if(!$this->hasScripts) 
     return; 
    if ($this->version!==false) 
    { 
     foreach ($this->scriptFiles as $position=>&$scripts) 
     { 
      foreach ($scripts as &$script) 
      { 
       $script.="?".$this->version; 
      } 
     } 

     foreach ($this->cssFiles as $position=>&$styles) 
     { 
      foreach ($styles as &$style) 
      { 
       $style.="?".$this->version; 
      } 
     } 
    } 
    parent::render($output); 
} 
} 

將這個類,也就是說,在「組件」文件夾中。現在,您可以通過配置您的應用程序的參數,用它代替CClientScript的,通常是在配置/ main.php:

'clientScript' => array(
    'class' => 'ClientScript', 
    'version'=>2, 
    //the rest parameters are same as usual. you can set up packages here and so on. 
) 

的代碼可以提高跳過這些文件作爲jQuery和其他第三方庫的版本 - 這是由你決定。

+0

這是真的我需要 –

+0

如果有可能以這種方式添加子域,我想刪除所有靜態文件到CDN,所以我需要添加CDN。在絕對URL中,但$ this-> scriptFiles只包含相對URL的 –

+1

好!我已經做到了:) public function setCoreScriptUrl($ value) {baseltl = str_replace('://',': $ value = $ baseUrl。$ value; parent :: setCoreScriptUrl($ value); } –

相關問題