smarty局部缓存
By admin
- One minute read - 79 wordsSmarty提供了强大的 缓存功能。但有时我们并不希望整篇文档都被缓存,而是有选择的缓存某一部分内容或某一部分内容不被缓存。例如你在页面上端使用一个带有广告条位置的模板, 广告条可以包含任何HTML、图象、FLASH等混合信息. 因此这里不能使用一个静态的链接,同时我们也不希望该广告条被缓存. 这就需要在 insert 函数指定,同时需要一个函数取广告条的内容信息。smarty也提供了这种缓存控制能力。
我们可以使用$smarty->register_block($params,&$smarty)使整篇页面中的某一块不被缓存。
index.tpl:
XML/HTML代码
- <divalign=‘center’>
- Page created: {“0″|date_format:”%D %H:%M:%S”}
- <{dynamic}>
- Now is: {“0″|date_format:”%D %H:%M:%S”}
- … do other stuff …
- <{/dynamic}>
- div>
index.php:
XML/HTML代码
- function smarty_block_dynamic($param, $content, &$smarty) {
- return $content;
- }
- $smarty = new Smarty;
- $smarty->caching = true;
- $smarty->register_block(‘dynamic’, ‘smarty_block_dynamic’, false);
- if(!$smarty->is_cached()){
- …….
- }
- $smarty->display(‘index.tpl’);
注解:
定义一个函数,函数名格式为:smarty_type_name($params, &$smarty)
type为block
name为用户自定义标签名称,在这里是{dynamic}
两个参数是必须的,即使在函数中没有使用也要写上。两个参数的功能同上。
单独这样使用,可能你发现并没有实现您所需要的功能,这是因为还需要在smarty_compiler.class.php中修改几行代码:
在上面的这个文件里面搜索$smarty->register_function(‘current_time’,’smarty_function_current_time’,true);这个字符串,大约在702行。
把这行代码修改为:
if($tag_command == ‘dynamic’) $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);
之后再打开您刚才写的页面就会发现部分缓存的功能已经实现了。