CakePHP

CakePHP パンくずリストについて

CakePHPのパンくずリストについて少し記載します。
年末ということで若干の忙しさから、更新できずにありました。

さて、今回はCakePHPのパンくずリストについてです。
パンくずリストはご存知の方は多いかと思います。
ただプログラムを組むとなると、無駄に時間をかけたくはない
小さな部分でもあるかと思います。

例えば

HOME >>カテゴリー一覧 >> 商品一覧

のようなパンくずリストを出力したい場合
普通なら直接記述したり、自前で関数を作ったりなどしますが、
もちろんCakePHPには、その小さな部分も用意されています。

先ほどの例をもとにCakePHPでは次のようにすることで
パンくずリストが出来上がってしまいます。

//パンくずリストのリストへ追加
addCrumb('HOME', ’/’);
addCrumb('カテゴリー一覧', array('controller'=>'categories','action'=>'index'));
addCrumb('商品一覧', array('controller'=>'products','action'=>'index'));
//パンくずリストを出力
echo $html->getCrumbs();

と記述することで先ほどの例の形で出力されます。
「addCrumb()」の引数では次のようにCakePHPでは定義されています。

addCrumb($name, $link = null, $options = null)
第1引数ではパンくずリストで表示する名前を指定します。
第2引数では指定した名前をクリック時にリンク先を指定します。
リンク先が指定されなかった場合、第1引数の名前が文字列で表示されます。
リンクの指定方法は「$html->link()」の指定方法と同じになります。
第3引数では、「$html->link()」の第3引数であるリンクタグのHTML属性の指定をします。

続いて「getCrumbs()」では次のように定義されています。

getCrumbs($separator = ‘»’, $startText = false)
「addCrunmb」で追加した情報を元にパンくずを生成します。
第1引数ではパンくずの間に表示する文字を指定します。
指定しない場合は「>>」となります。
第2引数では始まりのリンクを自動で設定するかを指定します。
例えば「カテゴリー」「一覧」と「addCrumb()」で追加していた場合、
通常は
「カテゴリー>>一覧」
となりますが、「getCrumbs()」の第2引数を「HOME」とした場合
「HOME>>カテゴリー>>一覧」となり、「HOME」にはルートディレクトリ(「/」へリンク)への
リンクが自動で作成されます。

さて先ほどの例では「HOME」を普通に記述していました。
「getCrumbs()」の第2引数があるのに、この説明では矛盾が生じてしまいます(笑

なぜ回りくどい説明をしてしまったかというと、「getCrumbs()」の第2引数を利用した場合は
「HOME」という名前のみを設定することが可能でクラス名やHTML属性を付与することが
できなくなってしまうのです。
その場合は「addCrumb()」で最初に指定しておき、「getCrumbs()」の第2引数を「false」
にすることで回避することが可能です。
もちろんプログラマーにとったら楽な方を選びますが、結局SEOを行うといったプログラム以外の
観点を思うと、個人的には回りくどくても工夫でなんとかします(笑

最後に登録されたパンくずリストを初期化する場合は次のように記載します。

$html->_crumbs=array();
//なぜかリセット機能はCakePHPにありませんでした

ちなみに以前利用した際のサンプルコードを記載しておきます。

例)

//以下のような配列をViewへセットします。
$crumbList=array(
array(
'Category',
array('controller'=>'categories','action'=>'index'),
array()
),
array(
'Product',
array('controller'=>'products','action'=>'index'),
array()
)
);
//ここから先は「element」にしてしまうと楽になります。
if(!empty($crumbList)){
$html->_crumbs=array();
foreach($crumbList as $crumbs){
$html->addCrumb($crumbs[0],$crumbs[1],$crumbs[2]);
}
echo $html->getCrumbs(' » ',false);
}

コメント

  1. […] CakePHP パンくずリストについて | WIDGET-INFO : http://blog.widget-info.net/2009/12/panlist/  […]