例のごとくCakePHPの定石があるので、よほどのことが無い限りそれを外れない方が無難と思われます。
Helperもありますが、まずは次の3点
- javascript の外部ファイル設置場所
- 外部ファイル呼び出し方法
- HTMLの埋め込み方
を理解すればOK。とりあえずこれを押さえないことにはHelperの使い方も腑に落ち難い。
例としてjQueryを用いたHTML埋め込みコードの記述の仕方を書きます。
1.jQueryの設置
/webroot/js ディレクトリに jQuery ファイルを設置する。
/webroot/js/jquery-1.7.2.min.js
2.jQueryの呼び出し
view ファイル内に以下のように記述(v 2.1 以降)。View::fetch( ‘script’ ) で表示される。(※デフォルトテンプレートではレイアウトファイルのヘッダに記述されているが、ビューファイルならばどこでもOK。ただし、View::fetchはCakePHP2.1以降。それ以前はレイアウト内の $scripts_for_layout に展開されていた)。
$this -> Html -> script( 'jquery-1.7.2.min', array( 'inline' => false ) );
その場所で出力したい場合は第二引数を空にするか ‘inline’ を true にする。
3.HTML埋め込みコードの記述
head にjavascriptコードを埋め込む場合はview ファイルに以下のように記述。(こうすることで、レイアウトファイルの View::fetch(‘script’) で処理され書き出される)
<?php $this->Html->scriptStart(array('inline'=>false)); ?> /** * script タグは補完されるので書いてはいけない。 */ $(ducument).ready(function(){ /* お好きに */ }); <?php $this->Html->scriptEnd(); ?>
HtmlHelper::scriptStart と HtmlHelper::scriptEnd の二つのメソッドで出力をいったんバッファしてプロパティに退避させ、それをあとで出力するという仕組み。
すでに文字列として javascript コードを保持しているときは
もしもすでに文字列として保持しているコードを出力するなら、このバッファリングの処理は無駄なので、それをすっ飛ばして HtmlHelper::scriptBlock を用いましょう。
<?php $script = 'alert("Hello CakePHP!");'; // すでに文字列として保持している javascript コード $this->Html->scriptBlock($script, array('inline' => false));
javascript コードをその場で出力するときは
ちなみにコードをそのまま吐き出させる場合は、上記の HtmlHelper::scriptStart の箇所を
$this->Html->scriptStart();
のように、引数を省略するか’inline’ の値を true にする。
余談:css の埋め込み
その他「埋め込み」と言えばCSSというわけで、スタイルシートをheadに埋め込む場合はこちらも参考にして下さい
3 Response Comments