エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説

      2019/09/28

CakePHP3でパンくずをヘルパーを使って編集する

 

CakePHP3にはパンくずを指定する方法は 2つある

 
CakePHP3では、パンくずを指定する方法は、下記の 2つ用意されています。
 
 
Cookbook Html HtmlHelper でパンくずリストを作成
https://book.cakephp.org/3.0/ja/views/helpers/html.html#id11
 
Cookbook Breadcrumbs (パンくず)
https://book.cakephp.org/3.0/ja/views/helpers/breadcrumbs.html
 
 
後者の方は、CakePHP 3.3.6で追加された、パンくずを生成するためのヘルパーで、より柔軟なパンくずを設定することができるようになっています。
 
ですが、パンくずの表現方法にこだわりがあまりない場合は、前者の HTMLヘルパーを使って構築するほうが簡単に生成できます。
 
 
というわけで、今回の記事では全社の HTMLヘルパーを使った簡単な生成方法を解説します。
 
 
ちなみに、リンクを設定する HTMLヘルパーについては下記の記事にまとめていますので参考にしてください。
CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども
 
 

パンくずを生成する基本形

 
HTMLヘルパーを使ったパンくずの生成は非常に簡単です。
 
まず、レイアウトファイルにパンくずのベースとなる処理を記述します。
 
パス付きのレイアウトファイルは以下になります。
/src/Template/Layout/default.ctp
 

 
これを記述した場所にベースとなる「Home」の部分が出力されます。
 
 
続いて、テンプレートファイルごとに「$this->Html->addCrumb()」を使ってページごとのパンくずを指定します。
 
パス付きのテンプレートファイルは以下になります。
/src/Template/Topics/view.ctp
 

 
 
レイアウトファイルに記述した「$this->Html->getCrumbs()」の場所に「$this->Html->addCrumb()」で指定した順番にパンくずが出力されていきます。
「addCrumb()」はいくつでも設定が可能です。
 
 

HTMLヘルパーを使って指定するパンくずは指定の順番が大切

 
また、「getCrumbs()」と「addCrumb()」を同一のテンプレートファイル内に記述する場合は記述する順番が大切です。
 

 
上記のサンプルのように「addCrumb()」を記述した後に「getCrumbs()」を記述します。
 
「getCrumbs()」でパンくずを出力した後に「addCrumb()」でページの情報を追加しても追加出力はされません。
 
 

Bootstrap対応の場合は「$this->Html->getCrumbList()」を使う

 
ここで解説した「getCrumbs()」を使うと、下記のような HTMLが出力されます。
 

 
これは見た通りの HTMLですので、これで問題ない場合も多々あるでしょう。
 
 
ですが、Bootstrapのパンくずは liタグで項目を指定する想定になっていますので、それに合わせたい、という場合は下記のように「getCrumbList()」が用意されています。
 

 
設定内容の
「firstClass」は、liタグの最初の項目に設定するクラスを指定します。
「lastClass」は、liタグの最後の項目に設定するクラスを指定します。
「class」は、パンくず全体の ulタグに設定するクラスを指定します。
 
上記のように「getCrumbs()」を設定する箇所を「getCrumbList()」の設定に置き換えると、下記のように liタグで処理された HTMLが出力されます。
 

 
「addCrumb()」の処理は、「getCrumbs()」「getCrumbList()」はどちらも同じ様に動作しますので、出力したい HTMLに合わせて選択してください。
 
 

パンくず生成の応用編・パンくずの HTMLをテンプレート化する

 
パンくずのベースとなる「$this->Html->getCrumbs()」を記述する場所が、前項と同じ様にレイアウトファイル 1箇所の場合は前項のように処理をしても問題ありません。
 
 
ですが、パンくずを編集する場所がレイアウトファイルではなく、テンプレートファイル上にある場合は、パンくずを編集するレイアウトファイルの全てに「$this->Html->getCrumbs()」を記述する必要があります。
 
万一「$this->Html->getCrumbs()」の内容を修正する必要が発生したときなどは大変です。
 
というわけで、パンくずの設置処理に少し柔軟性をもたせるために、パンくずの「$this->Html->getCrumbs()」をエレメント化(パーツ化)する方法を解説します。
 
 
まず、「$this->Html->getCrumbs()」をエレメント化します。
 
下記のファイルを生成し、コードの内容を保存します。
/src/Template/Element/crumbsElement.ctp
 

 
 
続けて、テンプレートファイル「/src/Template/Topics/view.ctp」のパンくずを編集する場所に下記の内容を追記します。
 

 
 
また、テンプレートファイル「/src/Template/Topics/view.ctp」に記述する下記の処理は特に変更ありません。
 

 
ただし、上記の内容は「$this->Html->getCrumbs()」より前に記述しておく必要がありますので、「element("crumbsElement"); ?>」より前に記述しておく必要があります。
 
 

パンくず生成の応用編・パンくずの HTMLをテンプレート化し、ブロック化する

 
CakePHP3のデフォルトのデザインを使用する場合、パンくずを編集する場所はテンプレートファイルになりますので、前項のエレメント化までで問題ないでしょう。
 
ですが、独自のデザインを作成しているときなどで共通のエレメント(テンプレート)などにパンくずを指定する場合に問題が発生する場合があります。
 
それは、「$this->Html->getCrumbs()」を記述すると当然のごとく、必要がないページにもパンくずの「Home」が表示されてしまうのです。
 
そのため、表示するかしないかの分岐処理が必要になりますが、そういう場合は「fetch()」でブロック化することで、表示、非表示の処理をフレームワークに任せてしまうことができるようになります。
 
 
今回は、サンプルのため「fetch()」はレイアウトファイルに設置をして試します。
 
パス付きのレイアウトファイルは以下になります。
/src/Template/Layout/default.ctp
 
レイアウトファイルにパンくずを編集する場所に下記の処理を記述します。
 

 
 
エレメントファイル「/src/Template/Element/crumbsElement.ctp」は、前項の内容と同一です。
 

 
 
続いて、各ページごとのテンプレートファイル(/src/Template/Topics/view.ctp)には以下のように記述します。
 

上記のように、テンプレートファイルに「$this->start("crumbs");」があるページが呼びされれば、「fetch(‘crumbs’)」の場所にパンくずを出力をします。
なければ何も処理されませんので、記述する内容はシンプルになります。

また、もう一つのポイントは、「$this->Html->addCrumb()」と「$this->element()」の順番です。

$this->Html->addCrumb()」を先に記述して、その後に「$this->element()」を記述します。
逆だと「addCrumb()」で追加した部分は表示されません。
 
 

サイト全体に共通する処理をページごとに切り替える処理

 
今回は、サイト全体に共通して指定をする必要はあるものの、ページごとにそれぞれ違うテキストを切り替えて編集していく必要があるパンくずを指定する方法を解説しました。
 
 
同じような考え方をする仕組みとして、下記の記事で書いている titleタグ、h1タグの値を指定する方法や、使用する JavaScriptや CSSをページごとに設定する方法、metaタグの「keywords」「description」を指定する方法、OGPタグの一種である OGPを指定する方法などにも活用することができます。
CakePHP3で /Layout/defult.ctpにある titleタグ、h1タグを編集する方法
CakePHP3でページごとに読み込むJavaScript、CSSを変える処理の解説
CakePHP3でkeywords、DescriptionをHTMLヘルパーを使って設定する
CakePHP3のOGPはHTMLヘルパーの$this->Html->meta()を使って設定
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
 
 
これらは、レイアウトファイルに変数を指定しておき、そこに編集する値を各ページ用のテンプレートファイルで指定する、という仕組みです。
 
 

CakePHP3の関連記事

CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
CakePHP3のOGPはHTMLヘルパーの$this->Html->meta()を使って設定
CakePHP3でkeywords、DescriptionをHTMLヘルパーを使って設定する
CakePHP3で環境変数を設定して本番環境と開発環境を分けて処理をする場合
CakePHP3でCookieを保存、呼び出し、削除の操作・CakePHP3.7対応
CakePHP3でアソシエーション先のカラムでデータをソートして取得したい
CakePHP3のdatetime型カラムの日時の扱い。秒まで正しく表示する方法
 
その他の「CakePHP3」に関する記事一覧
 
 

 - CakePHP 2.x 3.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP3の画像、ファイルアップロードプラグインUpload Plugin 3.0の設置解説・その1
CakePHP3の画像、ファイルアップロードプラグインUpload Plugin 3.0の設置解説・その1

CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその1で基本的な導入方法の解説で読みながら簡単に導入が可能。

CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説
CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説

CakePHP3で定数や共通で使う変数をまとめて設定し、プログラム内で読み込む方法を、bootstrap.phpに直接記述する方法と定数ファイルを分ける方法の3つの方法で解説。

CakePHP 2.3 Search Pluginで検索処理 その7queryを使って 日付の範囲検索

CakePHPの検索プラグイン Search Pluginの検索処理の中で queryを使って日付の範囲検索の方法です。

CakePHP3のfriendsofcake/searchでブックマークチュートリアルのタグ検索を実装
CakePHP3のfriendsofcake/searchでブックマークチュートリアルのタグ検索を実装

CakePHP3のCookbookにあるブックマークチュートリアル。ここで紹介されているタグで検索する処理を検索プラグイン「friendsofcake/search」で実現する方法を解説しました。

CakePHP3でkeywords、DescriptionをHTMLヘルパーを使って設定する
CakePHP3でkeywords、DescriptionをHTMLヘルパーを使って設定する

CakePHP3のkeywordsとdescriptionを設定する方法の解説。CakePHP3にはmetaタグを編集するHTMLヘルパーが用意されているためそれを利用すればOK!ポイントはブロック化を有効にすること。

Google Analytics APIを CakePHP3で動かしてレポートデータを取得する方法の解説
Google Analytics APIを CakePHP3で動かしてレポートデータを取得する方法の解説

CakePHP3で Google Analytics APIからレポートデータを取得する処理の解説。PHPのサンプルソースをCakePHP3で動くように改造。加えて、ディメンションやメトリックスを条件に設定する方法なども。

CakePHP 2.3 bakeの超初心者向けフォロー講座

CakePHP 2.3 bakeの超初心者向けフォロー講座

CakePHP 2.3 Search Pluginで検索処理 その3入力エリア一つで複数の項目を同時に検索する方法

CakePHPの検索プラグイン Search Pluginの検索処理の中で入力エリア一つで複数の項目を同時に検索する方法を解説。

CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説
CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説

CakeDC謹製Usersプラグインの紹介。Usersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。

CakePHP 2.3 Search Pluginで検索処理 その5入力項目に複数項目入力した場合の AND検索、OR検索

CakePHPの検索プラグイン Search Pluginの検索処理の中で複数項目を入力した場合の AND検索、OR検索についての解説です。