参考:http://www.51toria.cn/?p=68
demo.tpl
使用insert函数使模板一部分不被缓存
<br><{$file}><{$str}><br>
<div>这里是insert更新部分<{insert name="get_current_time"}></div>
<br>
使用register_function阻止内容从缓存输出
<div>这里是register_function函数更新部分<{current_time}></div>
<br>
使用register_block使用整篇页面的某一块区域不被缓存
<div>
Page created: <{"0"|date_format:"%D %H:%M:%S"}>
<{dynamic}>
Now is:<{$now}>
<{/dynamic}>
</div>
<table border="1">
<{assign var="Color" value="#ff0000"}>
<Tr>
<TD colspan="2">色彩:<{$Color}></Td>
</Tr>
<{section name=loop loop=$log}>
<{if $Color == "#ff0000"}>
<tr bgcolor="<{$Color}>">
<{assign var="Color" value="#CCCCCC"}>
<{else $Color == "#CCCCCC"}>
<tr bgcolor = "<{$Color}>">
<{assign var="Color" value="#ff0000"}>
<{/if}>
<td><{$log[loop].logid}></td>
<td><{$log[loop].title}></td>
<tr>
<{/section}>
</table>
demo.php
<?php
date_default_timezone_set('Asia/Shanghai');
include "conn.php";
require("libs/smarty.class.php");
$smarty = new Smarty();
$smarty->template_dir = 'templates/'
$smarty->compile_dir = 'templates_c/'
$smarty->config_dir = 'configs/'
$smarty->cache_dir = 'cache/'
$smarty->caching = true;
$smarty->left_delimiter="<{";
$smarty->right_delimiter="}>";
$smarty->cache_lifetime = 3600;
function insert_get_current_time() {
return date("Y-m-d H:m:s");
}
function smarty_function_current_time($params, $smarty) {
return date("Y-m-d H:m:s");
}
function smarty_block_dynamic($param, $content, $smarty) {
return $content;
}
if (!$smarty->is_cached("demo.tpl")) {
$file = "缓存内容:";
$str = 'Hello World!'
}
$smarty->register_function('current_time', 'smarty_function_current_time', false);
$smarty->register_block('dynamic', 'smarty_block_dynamic', false);
$smarty->assign('str',$str);
$smarty->assign('file', $file);
$smarty->assign('now',date("Y-m-d")."现在时间".date("H:i:s"));
$smarty->display('demo.tpl');
$sql="select id,logclassid,title from siyuroom_log order by datetime desc limit 0,100";
mysql_query("set names gb2312");
$query=mysql_query($sql);
while($row=mysql_fetch_array($query)){
$array[]= array("logid"=>$row["id"],"title"=>$row["title"]);
}
$smarty->assign("log", $array);
$smarty->display("color.tpl");
?>
要对smarty库作修改。
修改libs/Smarty_Compiler.class.php第721行:
if($tag_command == 'ywnocache') {
$this->_plugins['block'][$tag_command] = array($plugin_func, null, null, null, false);
} else {
$this->_plugins['block'][$tag_command] = array($plugin_func, null, null, null, true);
}
在libs/plugins中添加一文件:block.cacheless.php
<?php
function smarty_block_dynamic($param, $content, &$smarty) {
return $content;
}
?>