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のFrozenDateで1ヵ月前、先月、今月1日、来月末の日付などを算出する方法CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4のクリエビルダーを使用してOR条件をAND条件でつなぐSQL文を作る方法
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4から外部のデータベースにアクセスする方法解説
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
CakePHP2、CakePHP3、CakePHP4、CakePHP5のバージョンを調べる 2つの方法
Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法
CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法
その他の「CakePHP4」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
CakePHP 2.3でファイルのアップロード処理を作る
CakePHPでプラグインを使わないファイルアップロード処理を解説します。簡単です。DBにファイルを格納する方法も。
-
CakePHP3の検索プラグイン「friendsofcake/search」の設置方法・CakePHP3.6対応
CakePHP3で検索を担うプラグイン「friendsofcake/search」の紹介。基本的な設置方法の紹介のほか、処理の記述方法のバリエーション、エラーの解説など。CakeDC/searchより導入は簡単!
-
CakePHP3のfriendsofcake/searchでツリーカテゴリーの子階層も含めて検索する方法
CakePHP3のツリービヘイビアを使ったツリーカテゴリーの子階層も含めての検索を検索プラグイン「friendsofcake/search」を使って実現する方法を解説しました。
-
CakePHP4のCakeDC/Usersのログイン時のリダイレクトとユーザ権限管理の設定解説
CakeDC謹製UsersプラグインのCakePHP4版の紹介。ログイン認証後にリダイレクトする先の設定方法についての解説と実運用するために必要なコツを解説。便利な仕組みも仕様の理解があって初めてうまく使いこなせる。
-
CakePHP3でassociatedを使って関連データをまとめて保存する方法(hasOne、hasMany、belongsTo)
CakePHP3で関連データをまとめて保存する方法。hasOne、hasMany、belongsTo等の関連データはassociatedを追加することでまとめて保存することができます。
-
CakePHPで同一テーブル内の値を比較する条件でレコードを取得する方法
CakePHPの同一テーブルにある項目の値を比較し条件に合致するレコードを取得する方法を解説。[”項目名”=>”値”]ではなく[”項目名 = 項目名”]と書くところがポイント。
-
CakePHP 2.3 Search Pluginで検索処理 その5入力項目に複数項目入力した場合の AND検索、OR検索
CakePHPの検索プラグイン Search Pluginの検索処理の中で複数項目を入力した場合の AND検索、OR検索についての解説です。
-
CakePHP2の検索Plugin CakeDC/Searchで重複を省くgroup by(distinct)の実装方法
CakePHP2の検索プラグイン「CakeDC/Search」で、重複レコードを省くgroup by、distinctを使う方法についての解説。設定する場所はpaginatorの条件とするので、find()関数と同じ。
-
CakePHP4から外部のデータベースにアクセスする方法解説
CakePHP4のシステムから他のシステムのデータベースにアクセスをし、SQL文を実行する方法を解説。try-catchでエラーを取得する方法も解説。
-
CakePHP 2.3で確認画面付きのお問い合わせフォームの作り方
CakePHPで確認画面付きのお問い合わせフォーム、メールフォームの作り方をサンプルを提示しながら解説。