PR

[CakePHP] 標準機能でパンくず

パンくずリストはユーザビリティにもSEOにもたぶん良いだろう。

単体で実現する

「 TOP > hoge2 > hoge 」という結果を得るためには、単にviewに次のように記述すれば良い。ただし、addする順番には注意すること。

 $html->addCrumb('hoge2', array('controller'=>'hoge2'));
 $html->addCrumb('hoge', array('controller'=>'hoge'));
 echo $html->getCrumbs(' > ', 'TOP');

汎用性を高める

単体と同じ結果を得るとしても汎用的に使えるようにする場合は次のようにする。

  1. 任意の変数(配列)を展開してパンくずを作成し返却する element を作る
  2. view に element を追加する
  3. controller もしくは view で任意の変数に配列を渡す

スポンサードリンク

elements/breadcrumb.ctp

<?php
foreach($breadcrumb as $val) {
	$option = (isset($val['option'])) ? $val['option'] : array();
	$link = (isset($val['link'])) ? $val['link'] : null;
	$html->addCrumb($val['name'], $link, $option);
}

if(!isset($separator)) $separator = " > ";
if(!isset($top)) $top = 'Home';
echo $html->getCrumbs($separator, $top);
?>

view で行う場合

 $breadcrumb = array(
  array("name" => "hoge2" , "link" => "/hoge2"),
  array("name" => "hoge" , "link" => "/hoge" ),
 );
 echo $this->element('breadcrumb', array("breadcrumb" => $breadcrumb));

controller で行う場合のcontroller

 $breadcrumb = array(
  array("name" => "hoge2" , "link" => "/hoge2"),
  array("name" => "hoge" , "link" => "/hoge" ),
 );
$this->set('breadcrumb', $breadcrumb);

controller で行う場合の view

 echo $this->element('breadcrumb', array("breadcrumb" => $breadcrumb));

参考文献

※CakePHP1.1ではNG、1.2で使えるゾという記事があったので、1.3.2でやってみた
※本投稿は参考文献からの引用を含みます

コメント