2
使用Zend Paginator和paginator缓存工作正常,但所有内容都返回相同的缓存页面。 IE浏览器。我首先查看文章列表,当我查看文章列表返回的类别时。我怎么能告诉paginator我正在寻找哪个结果集?Zend框架为不同查询缓存分页结果
另外,如何在不重新查询分页符的情况下清除分页结果。 IE浏览器。我更新了一篇新闻文章,因此需要清除分页。
由于
使用Zend Paginator和paginator缓存工作正常,但所有内容都返回相同的缓存页面。 IE浏览器。我首先查看文章列表,当我查看文章列表返回的类别时。我怎么能告诉paginator我正在寻找哪个结果集?Zend框架为不同查询缓存分页结果
另外,如何在不重新查询分页符的情况下清除分页结果。 IE浏览器。我更新了一篇新闻文章,因此需要清除分页。
由于
Zend_Paginator的使用两种方法来定义缓存ID:_getCacheId和_getCacheInternalId。第二个功能是根据两个参数计算缓存ID:每页的项目数和适配器对象的特殊散列值。第一个函数(_getCacheId)使用_getCacheInternalId和当前页面的结果计算缓存ID。因此,如果您使用两个不同的paginator对象,它们具有3个相同的内部参数:适配器,当前页码和每页的项目数,那么这两个对象的缓存ID将相同。
所以我看到的唯一方法是定义你自己的从Zend_Paginator继承的paginator类,并重新定义这两个内部函数之一来添加一个salt到缓存ID。 事情是这样的:
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');
这似乎并不为我工作,部分原因是因为它正在运行不父存在的函数.. 是Zend_Paginator :: setCacheSalt(静态类的问题?) ()不存在。无论如何,我都可以使用公共变量来解决它。但_getCacheId不会被调用?当然,Zend想到了这一点 - 为什么我不使用相同的获取方法和每页计数的项目? – Ashley 2010-07-05 17:29:57