CakePHP2で複数のパンくずリストを生成するヘルパー
Amazonのように、一つのページに複数のパンくずリストを表示したい時に使えるヘルパー。
以下、最終的に以下の2つのパンくずリストを得たいとした時の具体的な使い方。
カテゴリ1 > カテゴリ2
ジャンル1 > ジャンル2 > ジャンル3
導入と使い方
1. ヘルパーの作成
以下のファイルをapp/View/Helper以下に置く。
app/View/Helper/MultiCrumbsHelper.php
<?php
App::uses('AppHelper', 'View/Helper');
class MultiCrumbsHelper extends AppHelper {
public $helpers = array('Html');
private $crumbsList;
public function __construct(View $view, $settings = array()){
parent::__construct($view, $settings);
}
public function setCrumbs($crumbs = array()) {
$this->Html->_crumbs = array();
if (empty($crumbs)) {
return;
}
foreach ($crumbs as $crumb) {
$name = $link = $options = null;
if (isset($crumb[0])) {
$name = $crumb[0];
}
if (isset($crumb[1])) {
$link = $crumb[1];
}
if (isset($crumb[2])) {
$options = $crumb[2];
}
$this->Html->addCrumb($name, $link, $options);
}
$this->crumbsList[] = $this->Html->getCrumbList(array('separator' => ' > '));
$this->log($this->crumbsList);
}
public function getCrumbsList() {
return $this->crumbsList;
}
}
2. パンくずリストの登録
配列の0番目にパンくず名、1番目にパンくずのリンク先を格納した配列を、親から順に登録する。
1つめのパンくずリストの配列を作成
$crumbs1 = array(
array(
'カテゴリ1',
array(
'controller' => 'categories',
'action' => 'view',
1
)
),
array(
'カテゴリ2',
array(
'controller' => 'categories',
'action' => 'view',
2
)
)
);
2つめのパンくずリストの配列を作成
$crumbs2 = array(
array(
'ジャンル1',
array(
'controller' => ' genres',
'action' => 'view',
1
)
),
array(
'ジャンル2',
array(
'controller' => ' genres',
'action' => 'view',
2
)
),
array(
'ジャンル3',
array(
'controller' => ' genres',
'action' => 'view',
3
)
)
);
パンくずリストの配列を格納
ヘルパーのsetCrumbsメソッドを、作成した配列を引数として実行する。
$this->MultiCrumbs->setCrumbs($crumbs1);
$this->MultiCrumbs->setCrumbs($crumbs2);
3. パンくずリストの取得
getCrumbsListメソッドでパンくずリストが格納された配列を取得。リストを出力したい部分で以下のようにすれば出力される。
$crumbsList = $this->MultiCrumbs->getCrumbsList();
foreach ($crumbsList as $crumbs) {
echo $crumbs.'<br>';
}
カテゴリ1 > カテゴリ2
ジャンル1 > ジャンル2 > ジャンル3
Author And Source
この問題について(CakePHP2で複数のパンくずリストを生成するヘルパー), 我々は、より多くの情報をここで見つけました https://qiita.com/katsukii/items/a91bb2d5c811908463dc著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .