Smarty 3添加最后修改为图像

时间:2017-01-08 04:35:53

标签: php smarty smarty3

我正在使用Smarty,我也在使用浏览器缓存。每当修改图像(使用鸟舍)时,我想在“scr”属性中显示它,因此浏览器会在修改后重新加载图像。我知道这可以在PHP中使用filemtime()完成,因此它添加了一个Unix时间戳,显示文件上次更改的时间。但是当我尝试实现这一点时,我无法让它发挥作用。

我目前有这个:

<img id="PrvImage" class="js_lightbox" data-id="42" data-image="https://example.com/content/uploads/photos/2017/01/c2d1c2547b0c3feec3f86af7a6484832.jpg" data-context="album" src="https://example.com/content/uploads/photos/2017/01/c2d1c2547b0c3feec3f86af7a6484832.jpg" alt="alt">

我想要的是这个:

<img id="PrvImage" class="js_lightbox" data-id="42" data-image="https://example.com/content/uploads/photos/2017/01/c2d1c2547b0c3feec3f86af7a6484832.jpg" data-context="album" src="https://example.com/content/uploads/photos/2017/01/c2d1c2547b0c3feec3f86af7a6484832.jpg?=1483848592" alt="alt">

生成html的.tpl文件中的原始代码如下所示:

<img id="PrvImage" {if $profile['user_picture_id']} class="js_lightbox" data-id="{$profile['user_picture_id']}" data-image="{$profile['user_picture']}" data-context="album" {/if} src="{$profile['user_picture']}" alt="{$profile['user_fullname']}">

{$ profile ['user_picture']}是该文件的路径。所以我把它添加到与.tpl文件相关的PHP文件中:

$filemtime = filemtime($profile['user_picture']);

// assign variables
$smarty->assign('filemtime', $filemtime);

我将.tpl修改为:

<img id="PrvImage" {if $profile['user_picture_id']} class="js_lightbox" data-id="{$profile['user_picture_id']}" data-image="{$profile['user_picture']}" data-context="album" {/if} src="{$profile['user_picture']}?={$filemtime}" alt="{$profile['user_fullname']}">

生成:

<img id="PrvImage" class="js_lightbox" data-id="42" data-image="https://example.com/content/uploads/photos/2017/01/c2d1c2547b0c3feec3f86af7a6484832.jpg" data-context="album" src="https://example.com/content/uploads/photos/2017/01/c2d1c2547b0c3feec3f86af7a6484832.jpg?=" alt="alt">

调试后,我收到以下错误:

filemtime():第164行的/var/www/vhosts/qreets.nl/httpdocs/profile.php中https://example.com/content/uploads/photos/2017/01/c2d1c2547b0c3feec3f86af7a6484832.jpg的stat失败

我的问题:

我做错了什么,如何让它显示上次修改时间?

我知道Unix时间戳会在2038年出现问题,那么有更好的替代品会产生相同的影响吗?

1 个答案:

答案 0 :(得分:1)

好吧,就像我的其他问题一样,他们会被人们看到......&#34;并没有一个建议或者在那一天得到帮助的时候#34;大...

我设法编写了一个javascript函数来打破缓存。适用于每个图像。如果您不想在某些图片上添加时间戳(例如谷歌静态地图),则可以添加ID以排除这些图片。我希望它有所帮助。

{{1}}