Skip to content

Latest commit

 

History

History
135 lines (104 loc) · 5.08 KB

blog_template.wiki

File metadata and controls

135 lines (104 loc) · 5.08 KB

  1. summary blogチュートリアル(5) テンプレートの作成
  2. sidebar TableOfBlogTutorial
blogチュートリアル(4) テンプレートの作成

前のステップでページにPostリソース状態がセットされました。今度はリソースの表現のためのテンプレートを作成します。

Table of Contents

リソース用テンプレート

App/views/elements/post.tpl

リソーステンプレートはリソースに関わらず{$code}, {$header}, {$body}の3つがアサインされます。

ページ用テンプレート

App/views/page/index.tpl

ページにリソースの値がそのままセットされてないことに注目してください。リソース状態(連想配列変数)にリソーステンプレートが適用されたリソース表現(HTML文字列)がプレースフォルダ{$post}に展開されます。

つまりリソースの内部構造がページテンプレートでは暴露されていません。リソース自身に適用されるリソーステンプレートの範囲で閉じ込められているので内部構造が変わってもページテンプレートに変化はありません。リソースの表現はページではなくリソースが責任を持ちます。

Note:

   リソーステンプレートをUA別に用意すれば、それぞれ異なるリソース表現が可能です。これはコーディングの変更なしにファイルの設置だけで可能です。

Note:

   リソースがレイジーセットされた場合はこの{$post}が出現するまで実リソースリクエストは行われません。例えば{if}{/if}で囲まれて出現しなかったリソースリクエストコストはかかりません。この事はviewロジック(例えば状態に応じてページの見え方が変わるなど)を可能な限りテンプレート側に持たす事を意味します。テンプレートの都合をコントローラーであるページが関心をもつ必要が低減されます。

ページ用メタファイル

ページ用テンプレートのファイル名の拡張子がymlになっているファイルが”あれば”そのファイルがページ用メタインフォファイルとして扱えます。

ページ用メタインフォファイルは2ステップビュー(レイアウトファイルを使用した二段階のテンプレートレンダリング)に必要です。どのレイアウトを使うかをlayoutで指定します。

スタティックな文字列のセットにも使用します。下記の例ではtitleを指定しています。テンプレート側では{$layout.title}と指定します。

App/views/pages/index.yml

記事ページの設置

 * これまでのまとめとして「個別の記事ページ」を作成します。ページクラス、リソーステンプレート、ページテンプレート、ページテンプレート設定ファイルです。

htdocs/item.php

App/views/elements/item.tpl

App/views/pages/item.tpl

App/views/pages/item.yml

Note:

   @requiredアノテーションは必須の変数を表しています。なければこのページは実行されず、メソッド内で変数の有無のチェックの必要はありません。

Note:

   MVCフレームワークではブログ記事の個別ページは1コントローラーの別アクションとして実装されています。BEARでも1ページクラス内でまとめることも可能ですが、分かりやすい理解のためにここではまとめとして別のページクラスで実装しています。

関連項目

 * [onOutput BEAR_Page::onOutout]
 * [http://www.smarty.net/docsv2/ja/ Smarty]