- summary リソーステンプレート
リソースにテンプレートを指定してリソースを文字列化することができます。キャッシュオプションを併用すると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のあとにリンク名が入ります。
リソース結果がリストのリソースを接続したリソースした場合、多重ループで取り出せるのに注目してください。記事にそれぞれのコメントが入り、コメントにそれぞれのコメント評価が入るというような、リソース結果がリストでリソース接続されているリソースの表現が簡素にできます。
[agent]を有効にしているとUAに応じてリソーステンプレートを出し分ける事ができます。例えば同じユーザーリソースを表示する場合を考えてもiPhone 用とiPad用ではユーザーリソースの表示の仕方が変わる事があるでしょう。
その場合、user.iphone.tplテンプレートとuser.ipad.tplテンプレートを用意すれば自動的に出し分けられます。ページのリソースアクセスに変更はありません。次のページテンプレートも同じ表記です。
ページテンプレートは文字列化されたリソースのプレースフォルダを指定します。
ページテンプレート例 (UAによってこの$userに$user.iphone.tplもしくは$user.ipad.tplが反映されます)