我有很多地方包含像这样的CSS文件
$cs->registerScriptFile($cs->getCoreScriptUrl() . '/js/jquery/jquery.cookie.js');
和我有一个恒定的版本构建,它在每次提交后递增。有没有办法添加
?v=VERSION-BUILD
参数的所有脚本注册,不要硬编码,或重写yii lib?
就我个人而言,我扩展了cliclientscript类,使其为每个脚本和css添加唯一的参数。它可以很容易地改进,以满足您的需求。
我准备了这个组件的一个未经测试的简单版本。这个想法是重写clientscript的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:
'clientScript' => array(
'class' => 'ClientScript',
'version'=>2,
//the rest parameters are same as usual. you can set up packages here and so on.
)
可以改进代码以跳过诸如jquery和其他第三方库之类的文件的版本控制-这取决于您。