様々なTipsページ送り開発環境:CakePHP2.5.1GoogleやYahooなどの検索結果のページでよく見る1ページ目、2ページ目、前のページヘ、次のページヘなどのページ送り。これを素のPHPで書こうとすると結構面倒ですが、CakePHPのPaginatorコンポーネントおよびPaginatorヘルパーを使えば簡単に書くことができます。コントローラーでの準備まずは、コントローラーでPaginatorコンポーネントを指定し、ページ送りのデフォルト条件を指定します。'desc'));?>そして、ページ送りを使うアクション内で、設定をセットし、PaginatorコンポーネントのpaginateメソッドにModelを指定してデータを取得します。$this->Paginator->paginate('Post');$this->set(compact('data'));}?>ビューの書き方ビュー側のPaginatorヘルパーは様々なメソッドが用意されています。上記のようなコードをビューにそのまま書いても問題ないのですが、ページ送りの機能を他のページでも使う場合はエレメントにまとめてしまうとメンテナンスがラクになり、コードがすっきりします。app/View/Elements/paginator.ctpというファイルを作り、その中に上記のコードを書いておきます。それをビュー側から次のように呼び出せば、ビューにそのまま書くのと同じ状態が作れます。?>検索条件を引き継いだページ送り検索結果のgetパラメータをページ送りで引き継ぐ方法です。これは特に何も設定しなくてもCakePHP側が自動でそのようにやってくれます。唯一行うのは、ビュー側の検索フォームをgetで渡すことくらいです。ページ送りを?page=2のようにする方法デフォルトの状態だとページ数の部分は/page:2のような感じになっていますが、これを?page=2のようなパラメータで渡したい場合はコントローラーの設定で次のようにします。'querystring',);paramTypeにquerystringを設定することで期待通りの形式のURLが生成されます。ページ送りで重複データを省くページネーションで重複データを省くにはちょっと注意が必要です。BYを利用することです。BYを使う」をご覧ください。自動でどんどん読み込むページ送りFacebookやTwitterなどでよく見るスクロールしていくと次から次に表示されるタイプのもの。あれを実現するにはJQueryを使うことで対応できます。インフィニティスクロールを使った無限スクロールのやり方はこちらからご覧ください。最初に紹介したようにコントローラーにpaginateパラメータを設定するのが一般的ですが、一つのコントローラーに複数のページ送り機能があったりするときなど、ちょっと面倒になるのに加え、コントローラーのコード量も増えていきます。それらを防ぐためにもpaginateのパラメータをモデルに書いてしまうのもおすすめです。'desc'));}このように書いておきます。$this->Paginator->paginate('Sample');}このようにモデル側のpaginateパラメータを呼び出して、本来のpaginatorにセットすれば完成です。WEBシステム屋(SE・プログラマ)。CakePHPを利用して日々開発中。CakePHPをこれから始める方、ある程度CakePHPで開発をしている初級〜中級者の方を対象に、CakePHPでの開発をスピードアップするための情報をまとめています。CakePHPの案件のご依頼、御見積はこちらへご連絡ください。ENTRYWordPressとCakePHPの共存サイトを作るのに便利なWordPress。通常、テーブルを連結してデータを取得するには、アソシエーションを利用しデータを取得するデータを取得したい時に少し変わった条件で取得したい場合があります。