魏长东

weichangdong

东邪

解决thinkphp分页缓存bug

遇到一个问题,thinkphp框架用了smarty,用了缓存,造成分页有缓存,网上搜了下,好多人也遇到这种问题。

总体的解决思路是:smarty局部缓存的方法。以下方法,自己试了,可行有效。

php中自定义块

//smarty 3
// function declaration 如果使用是在类里面,就吧这个函数放到公共函数代码里面。不然会报错说
//找不到这个函数

function smarty_block_nocache ($param,$content,$smarty)
{
  return $content;
}
 
// register with smarty
$smarty->registerPlugin("function","nocache", "smarty_block_nocache");

Smarty3是用registerPlugin , Smarty2则是用register_block,我用的是smarty3.

但是这么做,有一点不方便就是,需要在代码里面重新调用Smarty类文件,所以下面这个方法更加好点。

给smarty写插件,函数,自己在n年前就已经干过了。

在Smarty/plugins目录下建一个文件 block.nocache.php 内容如下: 

<?php
function smarty_block_nocache($param, $content, $smarty)  
{  
      return $content;   
}  
?>

模板调用和上面一样。