我有很多地方包括像这样的CSS文件
$cs->registerScriptFile($cs->getCoreScriptUrl() . '/js/jquery/jquery.cookie.js');
我有一个常量版本构建,每次提交后都会递增。有没有办法添加
?v=VERSION-BUILD
所有脚本注册的参数,不要硬编码,或重写yii lib?
答案 0 :(得分: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,通常在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和其他第三方库等文件的版本控制 - 它取决于你。