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の関連記事
CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法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」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP3のfriendsofcake/searchでブックマークチュートリアルのタグ検索を実装
CakePHP3のCookbookにあるブックマークチュートリアル。ここで紹介されているタグで検索する処理を検索プラグイン「friendsofcake/search」で実現する方法を解説しました。
-
-
CakePHP3のCakeDC/Usersのログイン後のリダイレクトとユーザ権限管理の設定解説
CakeDC謹製Usersプラグインの紹介。ログイン認証後にリダイレクトする先の設定方法についての解説と実運用するために必要なコツを解説。便利な仕組みも仕様の理解があって初めてうまく使いこなせる。
-
-
CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法
CakePHP環境にてpostLinkで生成した削除のリンクをクリックしても処理が実行されず、JavaScriptでUncaught TypeErrorが発生。原因は同一IDを複数記述していることだった。
-
-
CakePHP3の画像、ファイルアップロードプラグインUpload Plugin 3.0の設置解説・その1
CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその1で基本的な導入方法の解説で読みながら簡単に導入が可能。
-
-
CakePHP3のルーティング(routes.php)の変更が反映されない時はキャッシュのクリアを
CakePHP3でルーティングの設定変更をしたけど反映されない!そんなときは慌てず騒がずキャッシュをクリアしよう!ルーティングの設定もキャッシュされることがあるらしい。
-
-
CakePHPのFlashエラーは出るが入力項目ごとのメッセージが出ないエラーの原因
Bakeして自動生成した入力フォーム処理を元に少し処理を追加したら、入力エラーがあってもエラーメッセージが表示されなくなった。原因はリダイレクトの処理にあった。
-
-
Google Analytics APIを CakePHP3で動かしてレポートデータを取得する方法の解説
CakePHP3で Google Analytics APIからレポートデータを取得する処理の解説。PHPのサンプルソースをCakePHP3で動くように改造。加えて、ディメンションやメトリックスを条件に設定する方法なども。
-
-
CakePHP4、CakePHP5のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP4の英語のメッセージを日本語化(多言語化)する手順を解説。オリジナルのメッセージを作成する方法やプログラムで文言を追加する場合の対応なども解説。
-
-
CakePHP3、CakePHP4のキャッシュをクリアする方法「bin/cake cache clear_all」を使う
CakePHP3、CakePHP4では処理を高速化する手法の一つとしてキャッシュを利用している。しかし、その情報は元の情報を更新しても反映されない場合がある。そんなときはキャッシュを削除する必要がある。
-
-
CakePHP3でComposerでインストールできないプラグイン、外部ライブラリを vendorに入れて手動で読み込む方法
CakePHP3にComposerからインストールできないプラグインやライブラリなどを利用する方法、vendorにファイルを設置し、composer.jsonを更新し、それを呼び出す方法を詳細に解説。