2012年3月1日

Yii Framework: CLinkPagerの実装を拡張してシンプルにする

やりたいこと

  • header, footer プロパティを無視
  • prevPageLabel, nextPageLabel プロパティなどの値を固定
  • htmlOptions の class 名を yiiPager から pager に変更
  • ページャーの css ファイルを html の head に貼らずに main.css に付け足す

それの何がいいの

  • ページャーの見た目がシンプルになる
  • ラベルの固定や css ファイルを呼び出さないので、実装がシンプルになる
  • 無駄なファイルが assets ディレクトリに作られるのを防ぐ
  • コアのウィジェットクラスがどう実装されているか把握できる
  • コアのウィジェットクラスの拡張方法が学べる
  • ビューでのウィジェットの記述がシンプルになる

やり方

まず framework/web/widgets/pagers 下の pager.css ファイルの中身を main.css に移して yiiPager 部分をすべて pager に置き換えます。続いてprotected/components/widgets 下に LinkPager.php というクラスファイルを作ります。あとは CLinkPager クラスを継承して、自分好みになるようにメソッドをオーバーライドしていきます。
init() では、ラベルの値を固定にしたのと、htmlOptions の class 名を yiiPager から pager にしています。run() では header, footer プロパティを echo しないように省略して、$this->registerClientScript() も省いています。こうすることによって、assets ディレクトリにファイルが作られないのと、html の head にページャーの css ファイルを貼るのを防げます。

あとは protected/config/main.php の import 部分に application.components.widgets.*' を付け足して、ビューで <?php $this->widget('LinkPager', compact('pages')); ?>  と書けばOKです。ページネーションのロジック部分は CPagination を参考にしてみてください。

参考リンク

0 件のコメント:

コメントを投稿