サイト作りで今では必須のようになってきたパーツ「パンくずリスト」。
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'); // ここでヘルパーをロード
}
}
これは便利で助かる機能でした。