我正在使用cakePHP 2.5
我希望在控制器中访问$this->Paginator->hasNext()
,但是它是通过异常访问的。
$type = array('featured', 'newest', 'trending');
foreach($type as $each)
{
$conditions = array('Product.status'=>'1', "is_$each" => '1');
$this->Product->recursive = 1;
//retrieve and set final result set
$this->paginate = array(
'fields' => array('Product.*'),
'conditions' => $conditions,
'limit' => $page_limit,
'page' => $page,
'order' => "$order_by $order_by_sort",
);
$products[$each] = $this->paginate('Product');
}
在我的页面上,我想显示3种类型的产品featured/trending/newest
。最初我默认加载第一页,然后当用户向下滚动时,我将调用ajax并附加下一页,就像明智一样。但如果到达最后一页,那么我想停止ajax调用(因为404 not found error
的未知页面。)
为了克服这个问题,我阻止了对未知页面的AJAX调用。并确保第一页不会持续!!
希望我的细节有意义!
我找不到任何论坛/文件的答案。如果它与任何内容重复,请指导我或指出我。
答案 0 :(得分:1)
您不需要(也不能*)访问控制器中的帮助程序。
看一下刚刚调用the source code for hasNext的the helper function _hasPage,它只是检查参数数组。
分页器参数为all available in the controller:
$paging = array(
'page' => $page,
'current' => count($results),
'count' => $count,
'prevPage' => ($page > 1),
'nextPage' => ($count > ($page * $limit)),
'pageCount' => $pageCount,
'order' => $order,
'limit' => $limit,
'options' => Hash::diff($options, $defaults),
'paramType' => $options['paramType']
);
所以从问题中的代码:
$this->request['paging']['Product']['nextPage']
您正在寻找的信息(每次拨打paginate
时都会被覆盖。
除非你有完全相同数量的特色,最新和趋势记录,否则每种类型都有一个ajax请求会更好。另请参阅this related question,了解有关实现无限滚动类型页面的更多信息。
*几乎所有东西都是可能的,你当然不需要在控制器中使用帮助器。
答案 1 :(得分:-1)
$这 - > Paginator-> hasNext()
这是帮助的一种方法。帮助者不被认为在控制器中使用,因为这违反了MVC模式和不良做法。如果您想,那么您就错了:修复您的体系结构,它被设计破坏了。
返回分页状态以及AJAX响应中的数据:
$a = '"0","46","","","","Abc CDE ApS ","","","","","81602832 ","","","","","","","","","","" '
# delete all ' "'
While($a -like '* "*')
{
$a = $a -replace ' "', '"'
}
# delete last character
$a = $a.subString(0,$a.length-1)
# whrite it into the console
echo ""
echo $a
您可以根据数据更改视图的状态:
$this->set('pagination', $this->request->paging['Product']);
$this->set('products', $result);
$this->set('_serialize', ['products', 'pagination']);