我有很多地方可以包含CSS文件,比如
$cs->registerScriptFile($cs->getCoreScriptUrl() . '/js/jquery/jquery.cookie.js');
我有一个常量版本构建,每次提交后它都会递增。
?v=VERSION-BUILD
param用于所有脚本注册,不要硬编码它,或重写yii lib?
zqdjd7g91#
就我个人而言,为了我自己的目的,我扩展了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); } }
把这个类放在“components”文件夹中,现在你可以通过配置应用的参数(通常在config/main.php中)来使用它,而不是CClientScript:
'clientScript' => array( 'class' => 'ClientScript', 'version'=>2, //the rest parameters are same as usual. you can set up packages here and so on. )
可以改进代码,跳过诸如jquery和其他第三方库之类的文件的版本控制--这取决于您。
1条答案
按热度按时间zqdjd7g91#
就我个人而言,为了我自己的目的,我扩展了CClientScript类,使它为每个脚本和css添加唯一的参数。它可以很容易地改进以满足您的需要。
我已经准备了这个组件的一个未经测试的简单版本,其思想是覆盖CClientScript的render()方法,该方法在任何脚本文件被回显之前被调用:
把这个类放在“components”文件夹中,现在你可以通过配置应用的参数(通常在config/main.php中)来使用它,而不是CClientScript:
可以改进代码,跳过诸如jquery和其他第三方库之类的文件的版本控制--这取决于您。