【问题标题】:is there any way to add version build number for all including css files有什么方法可以为所有包括 css 文件的版本添加版本号
【发布时间】:2013-01-02 21:40:24
【问题描述】:

我有很多地方包含类似这样的 CSS 文件

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

我有一个恒定的版本构建,每次提交后都会递增。有没有办法添加

?v=VERSION-BUILD

所有脚本注册的参数,不要硬编码,或者重写yii lib?

【问题讨论】:

  • 对那个框架不太熟悉,但是快速搜索一下,我看到 Yii 有一个 asset manager 似乎可以处理这个问题……如果使用 Gii,可能还有其他功能?

标签: php css yii


【解决方案1】:

出于我个人的目的,我扩展了 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 和其他第三方库等文件的版本控制 - 这取决于您。

【讨论】:

  • 如果可以通过这种方式添加子域,我想将所有静态文件删除到CDN,所以我需要添加cdn。在绝对 URL 中,但 $this->scriptFiles 仅包含相对 URL
  • 好的!我已经做到了:) public function setCoreScriptUrl($value) { $baseUrl = str_replace('://','://cdn.',\Yii::app()->baseUrl); $value=$baseUrl.$value;父::setCoreScriptUrl($value); }
猜你喜欢
  • 1970-01-01
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
  • 2010-12-07
  • 1970-01-01
  • 2019-01-12
相关资源
最近更新 更多