1

Cakephp2.3paginatorヘルパーに問題があります。1.3バージョンでは、paginateメソッドは、渡されたページパラメータに正しい値があるかどうかをチェックしていました。今、それはもう機能していません。

たとえば、30件の結果、1ページあたり10個のアイテムを含むリストがある場合、これは最後の(3番目の)ページにリダイレクトされていました。

mycontroller/index/page:130

これで、ブラウザでURLを直接変更し、無効なページ番号を渡すと、結果がないと表示されます。

これは私がpaginateメソッドを使用している方法です:

$this->paginate = array(
                'limit' => 10,
                'order' => 'Appointment.start_datetime DESC'
            );
$appointments = $this->paginate('Appointment');

足りないものはありますか?

前もって感謝します。

アップデート

paginatorヘルパーは、ページ数を正確にカウントする方法を知っていますが、正しいページ数が渡されたかどうかは気にしないようです。ビューからの出力は次のとおりです。

print_r($this->Paginator->params());

ショー:

Array
(
    [page] => 1
    [current] => 10
    [count] => 30
    [prevPage] => 
    [nextPage] => 1
    [pageCount] => 3
    [order] => Appointment.start_datetime DESC
    [limit] => 10
    [options] => Array
        (
            [page] => 1
        )

    [paramType] => named
)
4

2 に答える 2

1

どちらのCakeバージョンにも、高すぎるpageパラメーターを処理するコードが含まれているようです。

ケーキ1.3:Controller->paginate()

if ($page === 'last' || $page >= $pageCount) {
    $options['page'] = $page = $pageCount;
} elseif (intval($page) < 1) {
    $options['page'] = $page = 1;
}

ケーキ2.3:PaginatorComponent->paginate()

$pageCount = intval(ceil($count / $limit));
$page = max(min($page, $pageCount), 1);

しかし、興味深いことに、Cake 2.3では、このコードはへの呼び出しのfind()に配置されるため、レコードを正しくフェッチするには遅すぎます。通知されたことがないバグである可能性があります。

于 2012-12-01T00:07:15.840 に答える
0

paginatorを使って遊ぶアプリがないので、これはブラインドになります。あなたは次のようなことをすることができます:

$page_count = $this->Paginator->params['paginator']['count'];
$page_requested = $this->request->params['paginator']['page'];

if($page_requested > $page_count){
    //Redirect to last page .....
}

ただし、2.xでこのデフォルト機能が削除されるとは信じがたいです。

pr($this->params);必要なpaginatorオブジェクトの正確なインデックスを取得するためにaを実行します。

于 2012-11-30T10:47:05.700 に答える