CakePHP4で公開側と管理側のデザインテンプレートを分ける方法・setLayout()
2023/12/28
公開側と管理側でレイアウトファイルを切り替える方法を解説
この記事では、
公開しない CMSの管理側の画面のテンプレートは「default.php」
一般公開するページのテンプレートファイルは「default_public.php」
といった感じで、公開画面側と管理画面側のデザインテンプレートを分ける方法を解説します。
CakePHP4のデフォルトのレイアウトファイルは「default.php」
CakePHP4のデザインテンプレートを管理しているレイアウトファイル(デザインテンプレートファイル)は下記になります。
/templates/layout/default.php
この「default.php」ファイルには「html」「head」「body」タグが記述されています。
また、「$this->fetch('content')」の部分には、各 controller、actionに該当する HTMLが編集されて、ページ全体が表示される、という処理になっています。
ページのデザインを変更する場合は、「default.php」をページのレイアウトファイルとして変更を行い、あわせて、各 actionごとのテンプレートファイルを変更することになります。
ですが、「default.php」を変更すると、公開側の画面も、管理側の画面もデザインも変わってしまいます。
そのため、この記事では、公開側の画面と公開側の画面のデザインプレートをそれぞれ設定する方法を解説します。
「/src/View/AppView.php」に「setLayout()」で指定
編集対象のファイルは以下になります。
/src/View/AppView.php
デフォルトの「initialize()」には何も記述されていませんので、下記の内容をまるっと追加する感じになります。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public function initialize(): void { parent::initialize(); // レイアウトとして読み込むファイルを指定する $this->setLayout('default_public'); // デフォルトのデザインテンプレートを使う処理を指定(管理側の画面を指定) $controllerArray = ["Topics","Users"]; $actionArray = ["index","add","edit","view"] if (in_array($this->request->getParam("controller"), $controllerArray)) { if ( in_array($this->request->getParam("action"), $actionArray) ) { $this->setLayout('default'); } } } |
まず初めに
6行目で公開側のレイアウトファイルを指定します。
指定した「default_public」は下記のファイルになります。
/templates/layout/default_public.php
このままでは、公開側も管理側も「default_public.php」に切り替わってしまいますので、13行目の処理で「default」を指定しなおします。
その際、「default.php」を使用する条件として、11行目で controllerを指定、12行目で actionを指定しています。
上記のサンプルでは、controllerと actionを条件としてレイアウトファイルを切り替える処理にしていますが、if文の分岐に「ログインしている/していない」を条件に加えたり、「ログインしているユーザの権限」を条件に加えたりすることで、多様な条件でデザインを切り替えることも可能になります。
いろいろと試してみてください。
「setLayout()」の使い方は CakePHP3でも同様
ちなみに、この記事は CakePHP4を対象とした記事として書いていますが、CakePHP3でも同様の記述で、同様の処理を行うことができます。
/src/View/AppView.php
上記ファイルがある場所は CakePHP4でも CakePHP3でも同じです。
/templates/layout/default.php
上記に関しては、ファイルが設置されているフォルダは同じ場所ですが、CakePHP3では「default.php」の拡張子が「.ctp」となっている点が異なるくらいかと思います。
CakePHP4の関連記事
CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
MySQL+CakePHPのdate型、datetime型項目は「2999-12-31」までしか扱えない
CakePHP4のFrozenDateで1ヵ月前、先月、今月1日、来月末の日付などを算出する方法
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4のクリエビルダーを使用してOR条件をAND条件でつなぐSQL文を作る方法
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4から外部のデータベースにアクセスする方法解説
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
その他の「CakePHP4」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP4、5でSELECT telephone as tel FROM usersの様にasでカラムに別名を付ける方法
CakePHP4、CakePHP5でクリエビルダーを利用してテーブルからレコードを取得する際、asを使用してカラムの別名で値を取得したい場合の対応方法を解説。また、別名にはハイフンやアスタリスクなど使用できない文字がある点も解説。
-
-
CakePHP 2.3 主キー(ID)以外のキーで更新方法 updateAll
主キー(ID)以外のカラムをキーとして更新する方法、updateAllの使い方をサンプルを用いて解説します。
-
-
CakePHP3のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説・3.6以降対応
CakePHP3のユーザ管理プラグイン Usersは、ユーザ登録、メール認証、ログイン認証、ユーザ管理、権限管理、reCAPTCHAなど会員制のサイトを簡単に実現可能。その導入方法、カスタマイズ方法を解説。
-
-
CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法
CakePHP4でコマンドを実行する際に引数(パラメータ)をコマンド内で受け取る処理について解説。複数個の引数にも対応する記述方法も解説。
-
-
CakePHP 2.3 Search Pluginで検索処理 その4前方一致検索、後方一致検索、不等号による検索、between句による範囲検索
CakePHPの検索プラグイン Search Pluginの検索処理の中で前方一致検索、後方一致検索、不等号による検索、between句による範囲検索の解説です。
-
-
CakePHPのバリデーションを入力値・項目の条件によって変える方法を解説
入力された値によってバリデーション(入力チェック)の内容を切り替える。その処理をCakePHPで実装する方法を解説。条件ごとに unset関数を使ってバリデーションを削除する、という方法を採る。
-
-
CakePHP3でDocumentRootやwebroot、imgフォルダのURLやドメイン、パスを取得
URLやドメイン、フォルダへのパスの取得は、ビューではUrlHelperを使い、コントローラーではRouterクラスを使います。第2引数の指定でURLを取得することも可能。
-
-
CakePHP3のビューで受取ったテーブルのオブジェクトを連想配列に変換する方法
コントローラーからビューに送ったテーブルのオブジェクトを連想配列に変換し、ビューの中で自由に使えるようにするメソッド「toArray()」の解説。連想配列に変換できれば利用度アップ!
-
-
CakePHP4のフラッシュメッセージの表示場所、デザインを変更する方法を解説
CakePHP4のエラーメッセージ、完了メッセージなどを表示するフラッシュ処理の解説。Controller、レイアウトファイル、テンプレートファイルでそれぞれ処理を指定する。
-
-
CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い
CakePHP3のシェルスクリプトを作成し、コマンドラインから実行する方法を解説。複数単語をつなげる場合の対応方法がCakePHP2より制限が厳しくなったのでCakePHP3の命名規則の確認が必要だ。