Skip to content

Latest commit

 

History

History
121 lines (87 loc) · 5.58 KB

resource_template.wiki

File metadata and controls

121 lines (87 loc) · 5.58 KB

  1. summary リソーステンプレート

Table of Contents

導入

リソースにテンプレートを指定してリソースを文字列化することができます。キャッシュオプションを併用するとCPUコストの節約に効果的です。またリソーステンプレートはUA別に用意することができます。

詳細

リソースオプションで指定

リソーステンプレートオプションしてreadするとリソースのボディとリソーステンプレートが合成された文字列がリソースとして扱われます。

リソーステンプレートはリソースread時の'template'オプションで指定します。例えば'user'を指定すると'App/views/elements/user.tpl'のテンプレートが使用され、リソースボディとリソーステンプレートが合成されページテンプレートにsetされます。

この時キャッシュオプションを指定するとボディの他にテンプレート適用した文字列もキャッシュとして保存されます。

リンク付きリソーステンプレート

リンクのあるリソースもテンプレートオプションを指定することができます。リソースが接続されたエンティティ(かたまり)としてキャッシュがつくられます。多数のリンクや何度も発行されるSQLのコストを劇的に低減します。

リンクのキャッシュはリンクされるリソースのキャッシュと別々に生成されます。リンクされるリソースのキャッシュを再利用しやすくするためです。

例えば

  # ユーザー → フォローしてる人  → フォロワーの最近の発言リソース
  # ユーザー → 最近の発言リソース→ 発言につけられるお気に入りリソース

と2つのリソースを取り出す場合に2回目のユーザーリソースはキャッシュされていれば再利用されます。最初のリソース以外の全てのリンクしたリソースはまとまりとしてキャッシュされます。

以下はユーザーリソースのキャッシュを10秒間、その他リンク全てのエンティティを20秒のキャッシュに指定しています。リンクのキャッシュ時間の指定は`['cache']['link']`で指定します。

リソーステンプレート

リソーステンプレートでは必ず{$body}というな名前でリソースボディがアサインされます。リソースリンクがある場合にはリンク名が入ります。

body.tpl (リソースリンクのない場合)

blog.tpl (リソースリンクのある場合)

$bodyのあとにリンク名が入ります。

リソース結果がリストのリソースを接続したリソースした場合、多重ループで取り出せるのに注目してください。記事にそれぞれのコメントが入り、コメントにそれぞれのコメント評価が入るというような、リソース結果がリストでリソース接続されているリソースの表現が簡素にできます。

UAリソーステンプレート

[agent]を有効にしているとUAに応じてリソーステンプレートを出し分ける事ができます。例えば同じユーザーリソースを表示する場合を考えてもiPhone 用とiPad用ではユーザーリソースの表示の仕方が変わる事があるでしょう。

その場合、user.iphone.tplテンプレートとuser.ipad.tplテンプレートを用意すれば自動的に出し分けられます。ページのリソースアクセスに変更はありません。次のページテンプレートも同じ表記です。

ページテンプレート

ページテンプレートは文字列化されたリソースのプレースフォルダを指定します。

ページテンプレート例 (UAによってこの$userに$user.iphone.tplもしくは$user.ipad.tplが反映されます)