> php教程 > php手册 > 본문

Smarty 局部关闭缓存配置

WBOY
풀어 주다: 2016-06-13 10:38:56
원래의
1081명이 탐색했습니다.

要在某些区域使缓存失效(只对需要的缓存),有几种方法:

一、inser:

定义一个inser标签要使用的处理函数,函数名格式为:insert_xx(array $params, object &$smarty)其中的xx是insert的name,也就是说,如果你定义的函数为insert_abc,则模板中使用方法为{insert name=abc}

参数通过$params传入

也可以做成insert插件,文件名命名为:insert.xx.php,函数命名为:smarty_insert_aa($params,&$smarty),xx定义同上


二、register_block:

定义一个block:smarty_block_name($params,$content, &$smarty){return $content;} //name表示区域名

注册block:$smarty->register_block(name, smarty_block_name, false); //第三参数false表示该区域不被缓存

模板写法:{name}内容 {/name}

写成block插件:

(1)定义一件插件函数:block.cacheless.php,放在smarty的 plugins目录

block.cacheless.php的内容如下:

function smarty_block_cacheless($param, $content, &$smarty) {

return $content;

}

?>

(2) 编写程序及模板

示例程序:testCacheLess.php

include(Smarty.class.php);

$smarty = new Smarty;

$smarty->caching=true;

$smarty->cache_lifetime = 6;

$smarty->display(cache.tpl);

?>

所用的模板:cache.tpl

已经缓存的:{$smarty.now}

{cacheless}

没有缓存的:{$smarty.now}

{/cacheless}

现在运行一下,发现是不起作用的,两行内容都被缓存了

(3)改写Smarty_Compiler.class.php(注:该文件很重要,请先备份,以在必要时恢复)

查找$this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, true); //我的在705行

修改成:

if($tag_command == cacheless) $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);

你也可以直接将原句的最后一个参数改成false,我对smarty的内部机制不太了解,所以加了一个判断,只要block是cacheless的才不作缓存

(4)OK,现在清除template_c里的编译文件,重新运行,起作用了吧?

  • 来源: 编程之家
  • 원천:php.cn
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 추천
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿