3

CakeBookに従って、Ajax ベースのページネーションを作成しました。リンクはすべて機能しており、コントローラーの正しいアクションにリクエストを送信しているため、ルートは機能しています。コントローラー アクションで関連するページ番号を取得し、それを Paginate ヘルパーに送信してデータを取得しています。ただし、設定されているページに関係なく、結果の最初のページのみが返されます。そのため、モデルで paginate 関数をオーバーライドしましたが、ページを常に 1 に設定しています。

コントローラ アクション コード..

public function reviews(){
   if ($this->RequestHandler->isAjax()) { 
        if(!empty($this->params['page'])) {
            $review = $this->Page->find('first',     array('conditions'=>array('friendly'=>'reviews')));
            $this->layout = 'ajax';
            $this->paginate = array(
                'page' => $this->params['page'],
                'limit' => 3,
                'order' => array(
                    'Review.rating'=>'desc')
            );
            $reviews = $this->paginate('Review');       
            $this->set(compact('review','reviews'));
        }
} 
}

では、送信しているページを Paginator に使用させるにはどうすればよいでしょうか?

4

1 に答える 1

2

さて、解決策を見つけました。ページネーションのデフォルトは、名前付きパラメータを使用することです。これにより、blah/page:6 のような URL が得られます。理由はわかりませんが、ページネーション配列をそのままにしてページを設定しないと、リクエストでページ番号が無視されるようです。そこで、ページネーションのオプションを次のように変更しました

                $this->paginate = array('Review'=>array(
                'paramType' => 'querystring',
                'page' => $this->params['page'],
                'limit' => 3,
                'order' => array(
                    'Review.rating'=>'desc')
            ));

これはルーティングを適切に通過せず、AJAX リクエストから間違ったページを取得していました。これにより、ルーティングの問題である可能性があると思いました....ビューのページネーションオプションを次のように設定して、ページングリンクを作成するときにルートを強制したため、これにはあまり従いませんでした:-

$this->Paginator->options(array(
    'update' => '#tabReviews',
    'evalScripts' => true,
    "url"=>(array("controller"=>'home',"action"=>'reviews',"plugin"=>'tyres'))
));

これは現在機能しているので、同じ問題を抱えている他の誰かに役立つことを願っています。

于 2013-01-10T11:01:16.283 に答える