Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cakephp检索超出限制的页面_Php_Cakephp_Paginator - Fatal编程技术网

Cakephp检索超出限制的页面

Cakephp检索超出限制的页面,php,cakephp,paginator,Php,Cakephp,Paginator,我使用的是cakephp 1.3 paginator,它运行良好,除了以下几点: 如果我有5个页面,通过这种url访问 我会得到最后一页,但如果我访问 我还得到了最后一页。但我不想检索任何值,因为它不是有效页面 我的配置如下: var $paginate = array( 'Post' => array( 'limit' => 10, 'order' => array('Post.id' => 'de

我使用的是cakephp 1.3 paginator,它运行良好,除了以下几点:

如果我有5个页面,通过这种url访问

我会得到最后一页,但如果我访问

我还得到了最后一页。但我不想检索任何值,因为它不是有效页面

我的配置如下:

  var $paginate = array(
        'Post' => array(
            'limit' => 10,
            'order' => array('Post.id' => 'desc')           
        ) 
    );

$posts = $this->paginate('Post');

<不幸的是,它是如何工作的,并且它被埋葬在控制器的中间::PPAIAATE()/<代码>方法:

// ...

if ($page === 'last' || $page >= $pageCount) {
    $options['page'] = $page = $pageCount;

// ...

因此,您几乎只有一个选项,您自己可以使用它来验证当前页面。

如果有人对cakephp 1.3的这个问题感兴趣,我将根据@ndm答案解释我的解决方案

场景如下

  • Paginate方法工作不好,所以我需要重写它
  • 我不想更新cake\controller.php文件,因为当我用最后一个1.3分支(如果发生)更新版本时,我必须重新定义它,问题是我可能会忘记这样做
  • 我不想在app_控制器中编写修复程序,因为分页方法太长,代码感觉很嘈杂
所以我决定创建一个新的PageController,它将扩展Controller类,并由AppController扩展

在这个文件中,我使用了整个paginate方法,并在@ndm提到的点之前进行了一个简单的修复:

        if ($page >= $pageCount)
        {
            return array(); //return empty array, so no rows found.
        }

        if ($page === 'last') {
            $options['page'] = $page = $pageCount;
        } elseif (intval($page) < 1) {
            $options['page'] = $page = 1;
        }
if($page>=$pageCount)
{
return array();//返回空数组,因此找不到行。
}
如果($page=='last'){
$options['page']=$page=$pageCount;
}elseif(intval($page)<1){
$options['page']=$page=1;
}
最后,我使用include帮助AppController找到PagerController:

<?php
include("pager_controller.php");

class AppController extends PagerController
{ 
     .....
}

您是否直接在url中写入页码。因为cakephp分页将只显示页面的确切数量,我正在编写这个数字,用于测试目的,即使这不应该发生,事实是爬虫程序可以找到这种URL,所以我不希望有多个具有相同内容的URL,对于SEO太差的问题,可以通过将分页的max limit属性设置为limit来解决。尝试并检查我无法使用max limit执行此操作,因为我不知道行的总数(除非我执行查询,很明显我不想执行此操作)