0

ウェブショップをやっています。カテゴリ ビューでは、ユーザーが製品をフィルタリングできるため、jquery を使用して製品をロードします。これはうまくいきます。

次に、ユーザーが閲覧していたページを (ページネーションで) 保存しようとしました。これにより、ユーザーが製品を閲覧してからカテゴリ ビューに戻った場合、以前閲覧していたページから開始できるようになりました。たとえば、私はページネーション ページ 3 にいて、製品を表示し、ブラウザの戻るボタンを押して、1 ページではなく 3 ページに進みます (これはデフォルトの CakePHP の動作です)。ページ番号をセッションに保存します。これは、見る限りうまく機能します。次に、そのページ番号をセッションから読み取り、$this->paginate as 'page' => $pagenumber で使用します。これも機能します。

しかし、奇妙な問題が 1 つあります。2 ページ目または 3 ページ目から開始すると (1 よりも大きなページですが、現時点では 3 ページしかありません)、1 ページ目に戻ることはできません。2 ページ目または 3 ページ目への切り替えはうまく機能しますが、ページ 1 に切り替えないでください。クリックしても何も起こりません。クロム要素インスペクタでネットワーク リクエストが送信されるため、バックグラウンドで何かが起こっています。ページを 'page' => 1 に手動で設定すると、3 つのページすべてに切り替えることができます。

私の問題を理解していただければ幸いです。できる限り説明したいと思います。(私の英語があまり上手でない場合は申し訳ありませんが、最善を尽くしました)。

私のコード(フィールドと結合なしでできるだけ短くしました):コントローラー内

$page_number = $this->Session->read('Pagination.currentpage');

$this->paginate = array(
    'conditions' => array(
        'Product.status' => 'active',
        'Product.visibility' => 1,
        'Product.hidden_on_site' => 0,
    ),
    'order' => 'Product.name ASC',
    'limit' => 20,
    'recursive' => 2,
    'page' => $page_number,
); 

$page_number が機能し、正しいページが出力されます。しかし、ページ 2 または 3 にいる場合、ページ 1 を取得できないという問題が発生します。手動で 'page' => 1 を設定すると、動作します。

別の方法で機能する手がかりまたは解決策があることを願っています...

4

1 に答える 1

0

CakePHP 2.x のPaginationRecall コンポーネントは、この目的のために非常にうまく機能します。いくつかのプロジェクトで使用しています。

著者は SO メンバーのAthanassios Bakalidisです。

于 2015-12-06T18:10:50.660 に答える