CakePHPで静的なページ(静的とは限らないけど)を作っていてわりと悩むのがパンくずリストの作り方。パンくずリストってページの下層の方のリンクになれば完全に個別ですけど、トップページへのリンクの部分なんて、どのページでも一緒じゃないですか。
だから僕の場合はelementsにpankuzu.ctpみたいなファイルを作って常にそれをrenderElementするようにしてるんですよ。あとはスイッチ文を使って、コントローラーごとに表示を分けるような感じで。
<?php
switch($this->params['controller']) {
case 'users':
$name = 'ユーザー情報';
break;
case 'contacts':
$name = 'お問い合わせ';
break;
case 'company':
$name = '会社概要';
break;
}
if($this->params['action'] != 'index') {
$link = $html->link($name, '/'.$this->params['controller'].'/').' > ';
} else {
$link = ' ';
}
echo $html->link('トップ', '/home/').' > '.$link;
?>
まあ、大雑把に書くとこんな感じですね。これなら、たとえば会社概要のページを作っているコントローラーがあるとして(上の場合でいうcompany)、そこに会社概要(アクションはindex)とスタッフ情報(アクションはstaff)があるとしたらだったら
// company/index/の場合
<?php echo $this->renderElement('pankuzu') ?>
// company/staff/の場合
<?php echo $this->renderElement('pankuzu') ?>スタッフ情報
こんな風に書けば、ページに表示されるのはそれぞれ、
トップ > 会社概要
まあ、基本PHP部分しかないからvendorsとかの方が良いのかもしれないけど? とりあえずはこんな感じでいつも対処してます。
してますが、でもこれ、上記くらいの感じならそれなりにさっぱりまとめられるんですが、アクションのさらに下層のページがいくつもあったり(スタッフ情報の下に個別スタッフの紹介ページがあってさらにその下に何かしらのページがあるとか)、indexじゃないページでも表示されるパンくずリストが トップ > 該当のページ だけだったりとかすると、意外とソースが汚くなります。まあ、僕の書き方の問題もあるんですけど。
分かりやすくコンパクトにまとめるためにわざわざelements以下にファイルを作ってるのだから、あまりごちゃごちゃしたソースになっても仕方ないしぃ……。
何か上手いパンくずリストの書き方って、ないもんですかねぇ。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。