URLをカスタマイズ
とりあえず、"Paginator"が生成するURLを文字列置換する方式。これを共通部品にするため、app/views/elements/ の中に"element"を作成する。
app/views/elements/pagination.ctp
<?php $prev_link = str_replace('page:', '', $paginator->prev('前のページ', null, null, array('class' => 'disabled')) ); $prev_link = preg_replace('/\/1"/', '"', $prev_link); $numbers_link = str_replace('page:', '', $paginator->numbers()); $numbers_link = preg_replace('/\/1"/', '"', $numbers_link); $next_link = str_replace('page:', '', $paginator->next('次のページ', null, null, array('class' => 'disabled'))); echo $prev_link; echo $numbers_link; echo $next_link; ?>
このelementを呼び出すためのコード(Viewに記述)。
<?php echo $this->element('pagination'); ?>
Routesの変更
paginateのURLに対応するため、Routing情報を追加。
app/config/routes.php
/* pagination */ Router::connect('/:controller/:action/:page', array('action' => 'index', 'page' => null), array('action' => 'index', 'page' => '[0-9]+'));
ここでconnect()の引数は、
- URLは controller名/action名/page名 の形式になっている
- controller名に対応するControllerが呼び出される(デフォルトのRouting)
- action名に対応するActionではなく、強制的にindexを呼び出す(デフォルトのRoutingを変更)
- page名はnull可(オプショナルな「カスタムRoute要素」)
- action名は"index"という文字列にマッチしないといけない
- page名は半角数字列にマッチしないといけない
というような意味。
0 件のコメント:
コメントを投稿