ThinkPhp 5.0 CSS,JS文件添加时间戳


为了使CSS和JS等静态文件修改后客户端可以自动更新,一般会在文件名后面加个参数。加参数的工作可以手动完成,当然使用代码完成更方便一点。

PHP中获取文件的修改时间可以用

int filemtime($file)
但是直接在模板文件中写

<link type="text/css" href="/static/css/list.css?tid={:filemtime('/static/css/list.css')}"/>

的话得到的是错误:找不到文件。因为filemtime接收的是一个绝对路径,不能用相对路径。ThinkPHP好像没有提供相对路径的辅助函数。所以经过研究后决定自己写个自定义函数获取时间戳。

在模板使用自定义函数不同的ThinkPHP版本有不同的用法,有的要在/common/common.php中定义,有的是在/common/function.php中定义。在ThinkPHP5.0中,应该在/common.php中定义,也就是直接在application文件夹下的common.php中定义。common.php内容如下

function stamp($file){
   $path=APP_STATIC.$file;
   return "/static/".$file."?tid=".filemtime($path);
}
为了方便获取static的绝对路径,可以在/public/index.php中定义APP_STATIC:

// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
define('APP_EXTEND', __DIR__ . '/../extend/');
define('APP_STATIC',__DIR__.'/../public/static/');

// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
这样可以直接在模板中用

<link type="text/css" rel="stylesheet" href="{:stamp('css/list.css')}"/>
来获取时间戳,执行后是这个样子:


那能不能在ThinkPHP5的css标签中使用时间戳呢?像这样:

{css href="{:stamp('css/list.css')}"/}
很遗憾,不能,这样会报错,可能是模板标签没有考虑到这种情况,期待下个版本能改善吧

总结:

ThinkPHP5在模板中使用时间戳可以这样操作:

1.在/public/index.php中定义APP_STATIC路径:

define('APP_STATIC',__DIR__.'/../public/static/');
2.在/application/common.php中定义时间戳函数:

function stamp($file){
   $path=APP_STATIC.$file;
   return "/static/".$file."?tid=".filemtime($path);
}
3.在模板文件中如下使用:

<link type="text/css" rel="stylesheet" href="{:stamp('css/list.css')}"/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值