今までCakePHPを使用してきて、ページ送りを実装したことがなかったのですが、今回実装する機会がありましたのでそれをまとめようと思います。
ページ送りというのは以下のようなやつです。
検索結果とかによく実装されているやつですね。
ただこれを自分で実装しようとすると、自分で全て計算し、例えば10件表示させようと思ってるけど、少し足りない場合はどうするか、とか色々面倒なことになってしまいます。
そこでCakePHPに準備されている、PaginatorヘルパーとPaginatorコンポーネントでさくっとページ送りを実装していこうと思います。
今回作成するページ送りは主に検索結果を表示することを想定して作っています。
まずは検索ボックスとなるビューを作成しましょう。
View/Posts/search.ctp
Form->create('Post', array( 'url'=>array('controller'=>'posts','action'=>'search','type'=>'get')); echo $this->Form->input('title'); echo $this->Form->end('Search');
次にGETで送信された値を検索してみましょう。
例えば以下のようにControllerを書きます。
Controller/PostsController.php
request->data['Post'] = $this->request->query['Post']; // Viewに値を渡す $this->set('results', $this->paginate('Post', array( 'post_name LIKE' => "%{$this->request->data['Post']}%")));
あとはビューで結果を表示するだけです。
以下のようにしましょう。
View/Posts/search.ctp
Paginator->prev('前へ'); echo $this->Paginator->numbers(); echo $this->Paginator->next('次へ'); foreach($results as $result) { // 処理を書く }
これで以下のようなページ送りを実装することが出来ました。
この状態では次のようなURLになっていると思います。
/posts/search/page:3?title=hogehoge
それを以下のようなURLにしましょう。
/posts/search?title=hogehoge&page=3
次のコードをControllerに書きましょう。
$this->Paginator->settings['paramType'] = 'querystring';
これでURLがGET風になりました!
以下が参考にした記事です。
参考
Pagination – CakePHP公式ドキュメント(英語)
更新情報はFacebookページで!
ブログの更新、読んで役立つ他ブログの記事などを更新しています。