使用Zend Paginator和paginator缓存工作正常,但是为所有内容返回相同的缓存页面。 IE浏览器。我首先看一下文章列表,当我去查看文章列表的类别时。如何告诉分页器我正在寻找哪个结果集?
另外,如何在不重新查询分页符的情况下清除分页结果。 IE浏览器。我更新了一篇新闻文章,因此需要清除分页。
由于
答案 0 :(得分:2)
Zend_Paginator使用两种方法来定义缓存ID:_getCacheId和_getCacheInternalId。第二个功能是根据两个参数计算缓存ID:每页的项数和适配器对象的特殊哈希值。第一个函数(_getCacheId)使用_getCacheInternalId和当前页面的结果计算缓存ID。
因此,如果您使用两个具有3个相同内部参数的不同paginator对象:适配器,当前页码和每页的项目数,那么这两个对象的缓存ID将相同。
所以我看到的唯一方法是定义你自己继承自Zend_Paginator的paginator类,并重新定义这两个内部函数之一,以便为缓存ID添加salt。 像这样:
class My_Paginator extends Zend_Paginator {
protected $_cacheSalt = '';
public static function factory($data, $adapter = self::INTERNAL_ADAPTER, array $prefixPaths = null) {
$paginator = parent::factory($data, $adapter, $prefixPaths);
return new self($paginator->getAdapter());
}
public function setCacheSalt($salt) {
$this->_cacheSalt = $salt;
return $this;
}
public function getCacheSalt() {
return $this->_cacheSalt;
}
protected function _getCacheId($page = null) {
$cacheSalt = $this->getCacheSalt();
if ($cacheSalt != '') {
$cacheSalt = '_' . $cacheSalt;
}
return parent::_getCacheId($page) . $cacheSalt;
}
}
$articlesPaginator = My_Paginator::factory($articlesSelect, 'DbSelect');
$articlesPaginator->setCacheSalt('articles');
$categoriesSelect = My_Paginator::factory($categoriesSelect, 'DbSelect');
$articlesPaginator->setCacheSalt('categories');