テンプレートの変数化

テンプレートを変数化する :setTemplate :setRendered

Ver. 2.6.0 より追加されたテンプレート要素になります。setTemplate, setRenderedを使うとテンプレートの変数化ができ、何度も同じテンプレートを再利用したり、複雑なレイアウトのテンプレートも作成しやすくなります。

setTemplate

setTemplateはテンプレートが解決される前のテンプレートを変数化します。 また、setTemplateで囲まれたテンプレートは非表示になります。

例えば、インクルード用のファイルを用意して、インクルード用のファイル内に、よく使用するテンプレートを setTemplate で囲みます。setTemplate で囲むことによって、インクルードファイルを一つインクルードするだけで、複数のテンプレートセットを使えるようになります。インクルード数が減り、テンプレートの管理がしやすくなります。

<!-- インクルードファイル -->
<!-- BEGIN_SetTemplate id="tplA" -->
<p>Aが呼ばれました。</p>
<!-- END_SetTemplate -->

<!-- BEGIN_SetTemplate id="tplB" -->
<p>Bが呼ばれました。</p>
<!-- END_SetTemplate -->
<!-- 上のインクルードファイルをインクルード 。この時点では何も表示されません。-->
<!--#include file="/include/template.html" -->

<!-- 以下の一行のコードを呼び出すと、Aが呼ばれました。と表示されます。-->
<!-- GETは一度だけではなく何度でも呼び出せます。 -->
<!-- GET_Template id="tplA" -->

このように、テンプレートをセットにして扱え、好きなときに好きなだけテンプレートを呼べるようになります。 また、テンプレートが動く前を変数化するので、GET_Templateで呼び出されるまでは実行されないので、setTemplateがたくさんあっても重くなりません。

setRendered

setRenderedはsetTemplateとは違い、テンプレートが解決されたあとに変数化します。なので、先ほどのsetTemplateと同じような使い方をすると、GETで呼び出していないテンプレートも実行されてしまいますので、同じ使い方は好ましくありません。ではどのようにsetRenderedを利用するのでしょうか?

以下のコードをみてください。

<div class="acms-container">
<div class="acms-grid-r">
  <div class="acms-col-md-9">
    <!-- BEGIN_MODULE Entry_Summary id="summary" -->
      ...
      <!-- BEGIN_SetRendered id="pager" -->
      <!-- #include file="/include/module/entry/pager.html" -->
      <!-- END_SetRendered -->
    <!-- END_MODULE Entry_Summary -->
  </div>
  <div class="acms-col-md-3">
    <!-- GET_Rendered id="pager" -->
  </div>
</div>

こういったレイアウトは実際にはないかもしれませんが、上記のソースコードでは、Entry_Summaryのページャーがサイドに呼び出されています。ページャーを呼び出している場所は、Entry_Summaryの外です。

一見動かないように見えますが、setRenderedなら動きます。(setTemplateは動きません。) なぜならページャーが解決された状態が変数になっているので、どこで呼び出しても正常に動くからです。

このように、setRenderedを使うと、モジュールの囲みから解放されて複雑なレイアウトでもテンプレートを作りやすくなりました。よく使う要素は、テンプレートの先頭のほうで変数化してしまい、後は必要なところで好きに呼び出せます。

テンプレートの呼び出しオプション

setTemplate, setRendered共に、GET_Template, GET_Rendered に テンプレートのIDを指定して表示しましたが、オプションがあるのでここで紹介します。

トリム

以下のように指定すると呼ばれたテンプレートの改行がなくなります。

<!-- GET_Rendered id="tpl" trim="1" -->

専用変数

以下のようにキーと値を設定すると、変数化したテンプレートで、その値を利用できます。 このキーと値のペアは、何個でも指定できます。

ここでは、キーに 「mid, title」 値に 「newsSummary, ニュース」 を設定しています。

<!-- BEGIN_SetTemplate id="summaryTpl" -->
  <h3>{{title}}</h3>
  <!-- BEGIN_MODULE Entry_Summary id="{{mid}}" -->
    ...
  <!-- END_MODULE Entry_Summary -->
<!-- END_SetTemplate -->

<!-- 呼び出し -->
<!-- GET_Template id="summaryTpl" mid="newsSummary" title="ニュース" -->

上のコードのように、キーと値はGETする時に好きな値を何個でも設定できます。 その値を呼び出す時は、{{hoge}} というように 2重の中かっこで表示させる事ができます。

変数のデフォルト値(Ver.2.6.1より)

また以下のように記述することにより、専用変数が指定されなかった場合に、デフォルト値として利用する事ができます。

<!-- BEGIN_SetTemplate id="summaryTpl" title="見出しです" -->
  <h3>{{title}}</h3>
  <!-- BEGIN_MODULE Entry_Summary id="{{mid}}" -->
    ...
  <!-- END_MODULE Entry_Summary -->
<!-- END_SetTemplate -->

このようにテンプレートを変数化して、呼び出すときにその挙動を決定できるので、テンプレートの再利用がやりやすくなります。

ポストインクルードを使ってテンプレートファイルを表示するときの注意点

ポストインクルードはhttpリクエストを使ってテンプレートを表示するため、ポストインクルードを記述している元のファイルに変数化(SetTemplateまたはSetRendered)の記述があっても、GET_TemplateまたはGET_Renderedを使用したとき、何も表示されません。表示するには、ポストインクルード先のファイル内にも再度、変数化(SetTemplateまたはSetRendered)の記述が必要になります。

例)ポストインクルードを記述している元のファイル:

<!--#include file="/include/template.html" --><!-- 変数(SetTemplate、SteRendered)が記述されているファイル -->

<!-- ポストインクルードで、include/main/entryList.html を呼び出し -->
<!-- BEGIN_MODULE Entry_Field id="fied_eid" -->
  <form action="" method="post" class="js-post_include-ready">
    <input type="hidden" value="{vars}" name="vars">
    <input type="hidden" value="vars" name="field[]">
    <input type="hidden" name="tpl" value="include/main/entryList.html">
    <input type="submit" name="ACMS_POST_2GET" style="display:none;">
   </form>
<!-- END_MODULE Entry_Field -->

例)ポストインクルード先のファイル(include/main/entryList.html):

<!--#include file="/include/template.html" --><!-- ← 再度記述する必要がある -->

<!-- GET_Template id="entryList" -->

変数表

Ver.2.6.1よりsetTemplateを定義したファイル群をTemplate_VarsTableモジュールで囲うことで、変数表を生成できるようになりました。以下がそのサンプルのソースになります。

<!-- BEGIN_MODULE Template_VarsTable -->
 
<!-- すべてのパーツの読み込み -->
<!--#include file="/include/template.html" -->
 
<!-- 変数表のテンプレートを読み込み -->
<!--#include file="/admin/template/vars-table.html"-->
 
<!-- END_MODULE Template_VarsTable -->

以下のようなコメント文をsetTemplate前に記述することで変数表に表示する内容を調整できます。

<!--@doc
# コメント一覧を表示します。
#
# @id comment_list
# @param module_id | モジュールIDを指定します。
# @author appleple
# @create 2016/04/26
-->
  • id: テンプレートのID名
  • param: テンプレートに代入できる変数名(複数指定可)
  • author: テンプレートの作成者名
  • create: 作成日