CakePHP3でPCのビューテンプレート(PC表示)とスマホのビューテンプレート(スマホ表示)を分けたい
PCとスマホの表示って現代のWebにおける課題ですよね。
自分は最初レスポンシブにしようと思ったんですけど、難易度が高すぎてやめました。
その代わりPCとスマホで表示画面を切り替えるようにしました。
CakePHP3でどのようにやるのかを見ていきます。
【自分の環境】
macOS Catalina
PHP7.4.2
CakePHP3.8
MAMP5.7
Apache2.2
MySQL5.7
PC版はそのまま
当たり前かもしれませんが、PC版はそのままのディレクトリで大丈夫です。
パスで言えば、/[アプリ名]/src/Templateと来て、その後はUsersだったりPhotosだったり各コントローラのディレクトリに分かれます。
そのまま使えば大丈夫です。
スマホ版はpluginsディレクトリをいじる
スマホ版のビューテンプレート等を入れるためにpluginsディレクトリをいじります。
以下のようにします。
plugins
→Sp
↓→src
↓→webroot
ディレクトリ構成、伝わるでしょうか…?
※SpというのはSmartPhoneという意味です。
さらに言うと、srcディレクトリにTemplateディレクトリを入れ、その中に各コントローラのディレクトリを入れます。
Templateから中の構成はPC版からコピペでOKです。
src
→Template
↓→Users
↓→Photos
そして、webrootにはcssやjsなどのディレクトリを入れます。
Template同様、webrootから中の構成はPC版からコピペでOKです。
注意点としてはHTML/CSSが完成した状態でコピペしてください。
そうじゃないとPC版もスマホ版も両方いじらなくちゃいけないことになります。
これでpluginsディレクトリをいじるのは終わりです。
コントローラは共通でOK
コントローラは分けないの?と思うかもしれませんが、共通でOKです。
AppコントローラのbeforeRenderファンクションに分岐処理を書く
ただしやっておくことがあります。
beforeRenderファンクションに「スマホ版の時はpluginsを読み込ませる」という処理を書きます。
コピペでOKです。
(AppControllerの一番下)
public function beforeRender(Event $event) { // ----- 処理 ----- // PC/スマホのview切り替え if ($this->request->isMobile()) { // plugins/Sp/src/Template内のviewが読み込まれる $this->viewBuilder()->theme('Sp'); } }
終わりに
以上となります。
自分が思っていたより簡単にできたので良かったと思いました。
レスポンシブデザインが難しいという方は、試してみてください。
ありがとうございました。