menu
書いてる野郎
orebike@gmail.com
テンプレート本体は app/views
ディレクトリに設置する。
この中にコントローラー名と同一のディレクトリを掘り、 そのディレクトリの中に
アクション名.ctp
という命名規則で作るのが定番。この規約を守っていれば、コントローラーで何も指定しなくても全自動でビューが決定する。
テンプレートはページごとに出力が違うが、同じアプリケーションなら共通する部分も多い。ここで共通部分を枠として定義して共有する仕組みがレイアウト。
レイアウトは名前はなんでもよく
app/views/layouts/
ディレクトリ以下に
hogehoge.ctp
として作る
テンプレートの中では様々なPHPのメソッドや変数が使える。もちろん使う場合は
<?php echo "hoge"; ?>
このように普通のPHPコードとして埋め込んで使うことになる。
コントローラー側で
$this->set("hogehoge", "ほげほげ");
のようにkeyとvalueのような関係で設定すると、テンプレート側でkey名を変数として値を引き出すことができる。
echo $hogehoge; #=>"ほげほげ"
こんな感じ。
CakePHPでは変数は基本的にラクダなんですけど、歴史的経緯かわからんですがテンプレート内で使われる各種変数が全部スネークなのでこのキーだけはスネークケースで入力したほうがいいのかもしれません。
HTMLのメタタグで文字コードを指定するためのタグを出力してくれる。
$html->charset();
このメソッドは文字列を返すだけなので出力するためにはechoする。
1.2は特別にそういう変数があったみたいですけど、1.3からは無いので↑のsetを使うやり方で代用すればよい
CakePHPでは読み込むCSSのファイル位置は
webroot/css
以下のものになっている。
なので
echo $html->css("hoge");
とやればパスの位置を計算に入れてくれた上で、hoge.cssを読み込む link タグを生成してくれる。
複数のlinkタグを作りたければ、2回書けばいいだけ。 別の手段として
echo $html->css(array("hoge", "piyo"));
と配列で与えてやると、2個一気に書ける。
外部のものを引っ張ってきたいのならば
echo $html->css("http://hoge.jp/piyo.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変数に出力される。
CakePHPでは読み込むJavaScriptのファイル位置は
webroot/js
以下のものになっている。
なので
echo $html->script("hoge");
とやればパスの位置を計算に入れてくれた上で、hoge.jsを読み込む script タグを生成してくれる。
echo $html->script("http://hoge.jp/piyo.js");
これは単純に書けばいいのだがなにやら別方法もあるみたいなので。
scriptBlockメソッドを使うとどサーっと書いてくれる
echo $html->scriptBlock(<<<JS alert("ほげ"); JS );
これもCSSと同様にechoをやめて inline を false指定すればいい
$html->script("hoge", array('inline' => false));
そうすれば
echo $scirpts_for_layout;
中に出力される