yii 是否有任何方法为所有包括css文件添加版本内部版本号

nom7f22z  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(147)

我有很多地方可以包含CSS文件,比如

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

我有一个常量版本构建,每次提交后它都会递增。

?v=VERSION-BUILD

param用于所有脚本注册,不要硬编码它,或重写yii lib?

zqdjd7g9

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和其他第三方库之类的文件的版本控制--这取决于您。

相关问题