smarty局部缓存处理

发布时间:2009-10-25 02:05:28 阅读:903次

参考: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;
 }
?>

如有问题,可以QQ搜索群1028468525加入群聊,欢迎一起研究技术

支付宝 微信

有疑问联系站长,请联系QQ:QQ咨询

转载请注明:smarty局部缓存处理 出自老鄢博客 | 欢迎分享