Posted on

CakePHPで複数prefixを使ったときのページネートの挙動を直す

前回はapp/core.phpの

Configure::write('Routing.admin', 'admin');
をコメントアウトすることでページネートのリンクを押した時にリンクエラーになるのを防ぎました。
じゃあ、「公開」「公開(携帯)」「管理」のように3つサイトを分ける時にはどうするの?ということで調べてみました。


まず、app/core.phpの

// Configure::write('Routing.admin', 'admin');
はコメントアウトのままで、
app/routes.phpに下記を追加します。
// 公開(携帯)
Router::connect(
'/m/:controller/:action/*',
array(
'prefix' => 'm',
'm' => true
)
);
// 管理
Router::connect(
'/admin/:controller/:action/*',
array(
'prefix' => 'admin',
'admin' => true
)
);
これで、
domain.jp/controller/action →公開側
domain.jp/m/controller/action →公開側(携帯)
domain.jp/admin/controller/action →管理側
になります。
それから、各viewの作る時にページネートの部分をヘルパーで書きますが、
if(!empty($prefix)) {
$paginator->options(array('url' => array($prefix => true)));
}
echo $paginator->counter(array('format' => "%start%件?%end%件 (全 %count%件)"));
echo ' ';
echo $paginator->first('最初',array('after'=>' ' ));
echo $paginator->prev('前へ');
echo $paginator->numbers(array('before' => ' ','after'=>' ', 'modulus' => 9));
echo $paginator->next('次へ');
echo $paginator->last('最後',array('before'=>' ' ) );
というように$paginator->optionsでurlにprefix名を与えてあげてください。
$prefixはcontrollerで$this->prefixをviewにセットした内容が入っています。
公開側(携帯)は「m」、管理側は「admin」が入っています。