Pear Pager + Twitter Bootstrap

CakePHPのページネーションより Pear Pager の方が好きなので、
CakePHPPear Pager を使ってみる。
さらに、 Twitter Bootstrap を使いたいので、ソースを少しイジる。

環境は CakePHP2.x + CentOS 6.3 で
Pear Pager はインストール済みとする。

まずは、Pear Pager を CakePHP の /app/Vendor ディレクトリにコピーする。
CakePHPでは外部ライブラリをVendorディレクトリに放り込んで使うらしい。
今回は Twitter Bootstrap に適用させるために、
ソースをいじったので、Vendor で管理した方が都合がよかった。

Pear Pager は /usr/share/pear/ の Pager.php + Pagerディレクトリ を使うので、
上記2点をVendorディレクトリにコピーする。

コピーしたら、Controller で Pager を読み込む。
ここの読み込ませ方は 1.3 と 2.x で違うので、注意。

App::uses('Pager','Vendor');

これで Pager は正常に読み込まれるが、
CakePHPはURLがフレームワーク的なので、リンク部分が上手く動かない。
なので、Pager のオプション配列を設定する。

オプション配列のポイントは以下になる。

$options = array(
    'path' => Router::url('index', true),
    'fileName' => '%d',
    'append' => false
);

path はリンクの絶対URLなので、Controller の Router::url() で設定する。
fileName は path の最後に付くページ番号。
append は false にしないと fileName が有効にならないので、false にする。
これで動くようになると思う。

次に Twitter Bootstrap を適用させる。
今回はソースコードをイジった。
Vendorディレクトリで管理しているので、
イジってもサーバ内の Pager には影響ないからいいかなと・・・。

まずは、HTMLを下のようにする。

<div class="pagination">
	<ul>
		<?php echo $_navi['all']; ?>
	</ul>
</div>

これだけだとダメで、
Pager から吐き出される aタグ に liタグ を付けなければいけない。

なので、ソースをイジる。

Pager の Common.php で組み立てられる aタグの前後に liタグ を付ける。

<li><a href="%s"%s%s%s%s title="%s">%s</a></li>

これでリンクは装飾されるが、アクティブになっているページは装飾されないので、
Pager のオプション配列で設定する。

$options = array(
    'curPageSpanPre' => '<li class="active"><a>',
    'curPageSpanPost' => '</a></li>'
);

これで現在ページの前後に li + a タグ を出力できる。

終了。