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 件のコメント:
コメントを投稿