KnpPaginatorBundle で Twitter Bootstrap でうまいこといくやつを出す
小ネタ。
Symfony2 つかってるとページング処理どうしようかってのに KnpLabs が公開してる KnpPaginatorBundle を使うことが多い。KnpPaginatorBundle は 2.0 系から Zend_Paginator に依存しなくなって使いやすくなりましたね。 *1
そして、最近特に管理画面系をサクっと仕上げるのに欠かせないのが Twitter Bootstrap なわけだけど、つまり、KnpPaginatorBundle が吐き出すページング用の HTML を、Twitter Bootstrap の、navigation でうまくいくやつを出力したいと思うわけです。
- High Performance PHP Framework for Web Development - Symfony 2.0.x
- Page not found · GitHub Pages v1.4.0
- KnpLabs/KnpPaginatorBundle · GitHub 2.0
テンプレートファイルを用意して parameters.ini に設定
Twitter Bootstrap 用に変更している点は、現在のページを active ってクラスにしている点とかその他なんだっけもろもろです。
これを自分で作ってるアプリの適当な Bundle の Resouces/views な場所に入れます。(今回は、 Pagination:pagination.html.twig にいれた。)
で、KnpPaginatorBundle が使うテンプレートを指定するのが parameters.ini で:
[parameters] ... knp_paginator.template.pagination=MyAppBundle:Pagination:pagination.html.twig
的なかんじ。
追記: なぜ parameters.ini なのか質問されたので追記。こういう設定は普通 config.yml 的なところで knp_paginator: template: pagination ... なんじゃ?とも思ったんですけど、ソース読んだら parameters から取ってたので、parameters.ini に書きました。勘違いしてたりして...!
追記の追記。 parameters.ini → config.yml に設定変わってた。
この内容つくったとき、最新のソースでソース読んでつくったんだけど、今度ブログ書こー、とおもって1ヶ月くらい経過してたせいで、その後テンプレート指定の方法が変わってたw
32c5c3c 時点では、parameters.ini でOKです。最新のソースでは 06dc809d で設定方法がかわってるので、 config.yml に書けば良いっぽいですね。
と、いうことで多分 config.yml に以下のように記述すればいいとおもいます。
knp_paginator: template: pagination: MyAppBundle:Pagination:pagination.html.twig
※ブログ書く前に最新版で確認しましょうという話。
でなんかする
なんちゃら Controller:
<?php // in some action $qb = $this->get('doctrine')->getEntityManager()->createQuery('...'); $paginator = $this->get('knp_paginator'); $posts = $paginator->paginate( $qb, $this->getRequest()->query->get($pageQueryName, 1), # page number $itemCount # items per page ); return $this->render('MyAppBundle:Internal:Hoge/fuga.html.twig', array( 'posts' => $posts ));
なんちゃら .html.twig
{{ posts.render()|raw }}
- それだけなのでとくにオチとかもないです
- KnpPaginatorBundle 使うと 各 column での sort とかも簡単に実装できるので楽ですね
*1:というか KnpLabs は謎の日本語サイトがあったりして面白いですね。日本でもがんばるつもりなんですかね?