CakePHP/ビュー

CakePHP/ビュー

バージョンと製造年月日

  • 2011-05-01
  • CakePHP 1.3.8

テンプレート

テンプレートの設置

テンプレート本体は app/views ディレクトリに設置する。

この中にコントローラー名と同一のディレクトリを掘り、 そのディレクトリの中に

アクション名.ctp

という命名規則で作るのが定番。この規約を守っていれば、コントローラーで何も指定しなくても全自動でビューが決定する。

レイアウト

テンプレートはページごとに出力が違うが、同じアプリケーションなら共通する部分も多い。ここで共通部分を枠として定義して共有する仕組みがレイアウト。

レイアウトの設置

レイアウトは名前はなんでもよく

app/views/layouts/

ディレクトリ以下に

hogehoge.ctp

として作る

テンプレートやレイアウトの中で使えるメソッドや変数

テンプレートの中では様々なPHPのメソッドや変数が使える。もちろん使う場合は

<?php
echo "hoge";
?>

このように普通のPHPコードとして埋め込んで使うことになる。

コントローラからの任意の値

コントローラー側で

$this->set("hogehoge",  "ほげほげ");

のようにkeyとvalueのような関係で設定すると、テンプレート側でkey名を変数として値を引き出すことができる。

echo $hogehoge;   #=>"ほげほげ"

こんな感じ。

CakePHPでは変数は基本的にラクダなんですけど、歴史的経緯かわからんですがテンプレート内で使われる各種変数が全部スネークなのでこのキーだけはスネークケースで入力したほうがいいのかもしれません。

HTML全体の文字コードを指定するメタタグ

HTMLのメタタグで文字コードを指定するためのタグを出力してくれる。

$html->charset();

このメソッドは文字列を返すだけなので出力するためにはechoする。

HTMLで使うタイトルの値

1.2は特別にそういう変数があったみたいですけど、1.3からは無いので↑のsetを使うやり方で代用すればよい

CSS用のlinkタグ

webroot/cssにあるCSSファイルを単に出力する

CakePHPでは読み込むCSSのファイル位置は

webroot/css

以下のものになっている。

なので

echo $html->css("hoge");

とやればパスの位置を計算に入れてくれた上で、hoge.cssを読み込む link タグを生成してくれる。

複数のlinkタグを作りたければ、2回書けばいいだけ。 別の手段として

echo $html->css(array("hoge", "piyo"));

と配列で与えてやると、2個一気に書ける。

外部のCSSを読み込む

外部のものを引っ張ってきたいのならば

echo $html->css("http://hoge.jp/piyo.css");

のように直接フルで記述すればヨシ。

コントローラー側で使いたCSSを指定する

単純に指定して引き込めばいい。コントローラ側で

$this->set("hogehoge_css", "aaa");

みたいにしておいて

echo $html->css($hogehoge_css);

で出力してやればいい

テンプレートファイル側でレイアウト内のスタイルシートを指定する

スタイルはテンプレートに依存するものがほとんどなのだからテンプレートでスタイルを指定したいというのが普通だろう。

しかしlinkタグが記述できる部分はhead要素内であって、通常レイアウトファイルにhead部は共通して切りだしてしまうのでテンプレートからはechでは出力できない。

ここでレイアウト側のhead要素内に

echo $scripts_for_layout;

を仕込んでおく。

そしてテンプレート側で

$html->css("hoge", null, array('inline' => false));

このように記述する。この最後のinlineのパラメータをfalseにすることで文字列として出力されずその出力がさっきのscripts_for_layout内に追記される

つまりテンプレートが先に解釈されてその後にレイアウトが解釈されるということ。あくまでこの順番で解釈するだけであってスコープ等は地続きではない。

テンプレートファイル側でレイアウトにスタイルを指定する

簡単に言うとHTML内でstyleタグを使って直接にスタイルを指定する方法。

CakePHPではこの方法は非推奨みたいで、普通のやり方が無い。ViewにaddScriptというメソッドがあるみたいなのでこいつを使って scripts_for_layout変数に値を書き込む。

テンプレート側で

$this->addScript(<<<CSS
<style>
#aaa{
    color:#FF0;
}
</style>
CSS
);

と記述しておくとlayout側のscripts_for_layout変数に出力される。

scriptタグの追加

webroot/jsにあるJSファイルを単に読み込むタグ

CakePHPでは読み込むJavaScriptのファイル位置は

webroot/js

以下のものになっている。

なので

echo $html->script("hoge");

とやればパスの位置を計算に入れてくれた上で、hoge.jsを読み込む script タグを生成してくれる。

外部にあるJSファイルを単に読み込むタグ

echo $html->script("http://hoge.jp/piyo.js");

内容アリのscriptの出力

これは単純に書けばいいのだがなにやら別方法もあるみたいなので。

scriptBlockメソッドを使うとどサーっと書いてくれる

echo $html->scriptBlock(<<<JS
    alert("ほげ");
JS
);

テンプレートファイル側でレイアウト内のJavaScriptを指定する

これもCSSと同様にechoをやめて inline を false指定すればいい

$html->script("hoge", array('inline' => false));

そうすれば

echo $scirpts_for_layout;

中に出力される

タグ

php/cakephp/view.txt · 最終更新: 2017-09-26 19:02 by ore