例外: http://api.cakephp.org/class_time_helper.html
リンクタイトルを取得できません
Created: 2008-10-24 16:19:18
規約で、アクション名と関連付けたビューのファイルは、htmlドキュメント等の表示に関するロジックを書く。
レイアウトディレクトリのファイルにより、割り付けられるのが普通。
割付とは、レイアウトディレクトリのファイルにhtml全体の構造を記述し、その構造の一部としてビューファイルがはめ込まれる(割付)ことをいう。
ケーキは、タイトルと、ヘッダー内の埋め込みスクリプト、それとビューファイルの出力3箇所の割付箇所を用意している。
これ以外にも、いわゆるスニペットも扱うことができる。
| ペアレントディレクトリ | コントローラ名をアンダースコアド |
| ファイル名 | アクション名をアンダースコアド |
| エレメントディレクトリのファイル | ? |
| layoutsディレクトリのファイル | ? |
app/views/小文字のコントローラ名ディレクトリ/sample.ctpは、app/views/Layout/内の、いずれかのレイアウトファイルの指定位置
に、挿入されて、全体として、(html)ドキュメントなどを生成する。
しかし、定型的なレイアウトは、使いまわされるのが常であり、それに比べて、sample.ctpは、ユニークな出力です。
タイトルは、sample.ctp毎に、別に生成する必要があり、そのため、ビューからラップ部分の一部変更が必要となる。
htmlの場合タイトルとエンベットヘッダとエントリそのものの、テンプレート変数を処理できるようになっている。こ
この処理は、view.php のrenderLayoutが司る。
これらの具体的な記述は、以下のようにできる。
/*
* viewから、default.ctpに値を渡す
* controller.ctpに以下を追加する事
* var $helpers = array('Cache','Javascript');
*
*/
$html->meta("description", "説明", array(), false);
$html->meta("keywords", "キーワード", array(), false);
$html->css('SyntaxHighlighter', null, array(), false);
$javascript->link('jquery', false);
$javascript->link('jQuery.syntaxHighlight', false);
$javascript->link('shCore', false);
$javascript->link('shBrushCSharp', false);
$javascript->link('shBrushXml', false);
$embedScript=<<<SCRIPT
…
SCRIPT;
$codes= $javascript->codeBlock($embedScript);
htmlドキュメント等の一部を形成する。共有ブロック部分、たとえば、バナーや、サブエントリなど、同じような作業の繰り返しを効率化するスニペット機能を提供する。
ビューから、そのページ特有の、文字列を指定することもできます。
具体的には、
echo $this->element('navigation',
array("navigationtext"=> "おや、このテキストはとっても便利。",
"t1"=> "配列にして、エレメントに値を挿入します。"));
と、sample.ctpに記述した場合、
<h3>navigation</h3> <div><p><?php echo $navigationtext;?></p><p><?php echo $t1;?></p></div>
と書かれた、navigation.ctpが呼ばれ、
<h3>navigation</h3> <div><p>おや、このテキストはとっても便利。</p> <p>配列にして、エレメントに値を挿入します。</p></div>
が、htmlとして、表示されることになります。
目下の課題
element.ctpの例で、
いわゆるテンプレート変数と、phpの変数との見分けがつかない。
element.ctpには、phpで関数を書くこともできるわけだから、テンプレート変数なのか、そうでないのかを決めるローカルルール
cake/libs/view/helpersにある。
helpersディレクトリのファイル名は、クラス名をアンダースコアドしたもので、AppHelperを継承します
app/views/小文字のコントローラ名ディレクトリ/sample.ctp
viewのロジック等を記述する補助をする。
コントロールクラスで、ver helpers= array("使うクラス"); 追加します。
app/controller/sample_controller.php
var $helpers= array('html', 'time');
app/view/sample/index.thtml
<?php if (!$time->wasWithinLast("1 weeks", $sample['modified'])) { ?>
<strong>New!!</strong>
<?php } ?>
<!-- フォームタグ -->
<?php echo $html->formTag() ?>
<p><?php echo $html->submit('投 稿') ?></p>
http://api.cakephp.org/class_time_helper.html
class BakeriesController extends AppController {
function bake {
$this->helpers[]= 'Time';
}
function mix {
// Time ヘルパーはここではロードされず、無効です。
}
}