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' => '&nbsp;&gt;&nbsp;'));
      $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