LoginSignup
4
4

More than 5 years have passed since last update.

CakePHP2で複数のパンくずリストを生成するヘルパー

Posted at

Amazonのように、一つのページに複数のパンくずリストを表示したい時に使えるヘルパー。

スクリーンショット 2015-04-14 20.36.15.png

以下、最終的に以下の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 
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4