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")}"/>
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: js和PHP 时间戳与日期转换
- 下一篇: js的时间戳和php的时间戳转换需要注意的地方