【问题标题】:CakePHP 2 pagination cacheCakePHP 2 分页缓存
【发布时间】:2016-02-25 08:23:27
【问题描述】:
【问题讨论】:
标签:
cakephp
caching
pagination
【解决方案1】:
您可以在每页缓存产品,然后手动分配分页设置:
$products_all_count = ???// you must count all products that match your conditions
$curr_page = (!empty($this->request->query('page')))? (int)$this->request->query('page') : 1;
$products_cache_key = 'product_' $products_all_count . '_page_' . $curr_page;
$products = Cache::read($products_cache_key);
$products_sett = array();
$products_sett['page'] = $curr_page;
$products_sett['limit'] = 100; // defined limit per page
if (!$products) {
// all conditions, settings etc.
$products = $this->Paginator->paginate('Product');
Cache::write($products_cache_key, $products);
} elseif (is_array($products)) {
$this->request->params['paging'] = array(
'Product' => array(
'current' => $products_sett['limit'] * $products_sett['page'],
'count' => $products_all_count,
'prevPage' => (($products_sett['limit'] * $products_sett['page']) <= $products_sett['limit'])? false : true,
'nextPage' => (($products_sett['limit'] * $products_sett['page']) >= $products_all_count)? false : true,
'pageCount' => ceil($products_all_count / $products_sett['limit']),
'limit' => $products_sett['limit'] ,
'page' => $products_sett['page'],
'options' => array()
)
);
}