サイト作りで今では必須のようになってきたパーツ「パンくずリスト」。

cakePHPにはHTMLヘルパーで表示できるようで嬉しい機能♪

でもそのままでは使えずHelper作成から操作する必要があるので、そこから表示までの流れを記録しておきます。

 

ヘルパー作成

 

bin/cake bake helper Breadcrumbs

 

ヘルパーを編集

作成されたヘルパーファイルにパンくずリストを表示させるメソッドを追加する

 

// src/View/Helper/BreadcrumbsHelper.php
namespace App\View\Helper;

use Cake\View\Helper;

class BreadcrumbsHelper extends Helper
{
  public function create($breadcrumbs)
  {
    $html = '<nav aria-label="breadcrumb"><ul class="breadcrumb">';
    foreach ($breadcrumbs as $label => $url) {
      $html .= '<li class="breadcrumb-item">';
      $html .= $url ? '<a href="' . $url . '">' . h($label) . '</a>' : h($label);
      $html .= '</li>';
    }
    $html .= '</ul></nav>';
    return $html;
  }
}

 

表示させたいコントローラーのメソッドにパンくずデータの準備

 

$breadcrumbs = [
  'Home' => '/',
  'Pages' => $this->request->getRequestTarget(),
];

$this->set('breadcrumbs', $breadcrumbs);

 

ビュー内でパンくず表示

 

<?= $this->Breadcrumbs->create($breadcrumbs) ?>

 

これでHelper内で準備したHTMLソースが出力されパンくずができます。

CSSフレームワークを使用している場合HelperのHTMLに任意のクラス名をあてておくと良いと思います。

パンくずの階層は、コントローラーで準備した配列データの順により階層を作って表示してくれます。

 

もし、以下のようなエラーが表示した場合

 

Call to undefined method App\View\Helper\BreadcrumbsHelper::create()

 

Helperに追加したメソッド名の綴りが間違えているか、ヘルパーが正しくロードされているか確認してみると良いかと思います。念のため、AppView.phpにロードするように記述すると安心かもです。

 

// src/View/AppView.php
namespace App\View;

use Cake\View\View;

class AppView extends View
{
  public function initialize(): void
  {
    parent::initialize();

    $this->loadHelper('Breadcrumbs'); // ここでヘルパーをロード
  }
}

 

これは便利で助かる機能でした。