[学習 cakePHP #09] レイアウトやビューなどの画面表示周り。
前回まででとりあえずコントローラー周りを作って、投稿、閲覧、編集、削除機能が動くようになったので今回は画面の表示周りについてです。cakePHPでは表示周りは、レイアウト、ビュー、エレメントにて管理されています。
大まかにそれぞれの役割を書くと、
- レイアウト :: 画面表示を担当。HTMLでいうと<html> ~ </html>までの外観全て。
- ビュー :: コントローラーのアクションに対応する。
- エレメント :: Movable Typeでいうところのウィジェット。
レイアウトのテンプレートからビューやエレメントを呼び出しています。それぞれのテンプレの保存場所は
/app/view/
├ ○○○/
├ elements/
└ layouts/
app/view/以下に保存されてます。○○○はコントローラーに対応するやつね。今回のゲストブックの例だとboardsです。○○○にはアクションに対応したビューのテンプレが既に作成されていますけど、elements、layoutsは空ファイルしか入ってません。
レイアウトテンプレートはデフォルト状態だとシステム側に保存されているものが使用されます。
/cake/libs/view/templates/layouts/default.thml
にあるのでdefault.thmlの名前のまま /app/view/layouts/ にコピーします。このコピーしたテンプレを基にしてHTML構造などを修正します。
レイアウトのテンプレを切り替えたい。
とくに指定しない場合レイアウトテンプレは default.thmlが使われます。レイアウトの切り替えを考えてみる。
1. アクションによって切り替えたい。
例えば indexアクションとeditアクションでは違うレイアウトテンプレートを使用。この場合には以前に出てきたrender()関数を使います。
$this->render("index", "test-layout");
ってな感じでコントローラーのアクション内の最後で呼び出します。
2. コントローラーによって切り替えたい。
今回のGuest Bookではboards_controller.phpの1つだけでしたが、ユーザー管理用のuser_controller.phpがあった場合にそれぞれで違うレイアウトにしたい。
<?php
class BoardsController extends AppController {
var $name = "Boards";
var $layout = "test-layout";
?>
この場合はコントローラーの頭で$layoutにレイアウトテンプレート名をセットします。これでBoardsコントローラーを使うときにはレイアウトテンプレはtest-layoutが使われます。
今回はレイアウトテンプレの切り替え方を書いただけで終わっちゃいました。次回でGuest Bookの画面表示周りを終わらせたいと思います。

コメント