実行順序

テンプレートファイル上での実行順序

テンプレートエンジンの実行順序は以下のようになります。

  1. グローバル変数を解決
  2. インクルード処理を解決
  3. setTemplateを処理(テンプレートの変数化)
  4. getTemplateを解決(変数の挿入)
  5. タッチモジュールを解決(デフォルトON)
  6. モジュール類を内側から解決(同じ階層の場合は下から)
  7. IFブロックを解決
  8. setRenderedを処理(解決済テンプレートを変数化)
  9. getRenderedを解決(変数の挿入)

テンプレートの実行順序を頭に入れておく事はテンプレートを作成していく上で非常に重要になってきます。
例えば、インクルード文を書くときに、グローバル変数を使ったパスで指定するテクニックがあります。

<!--#include file='/admin/entry/category%{CID}.html'-->

上のコードは、正常に動きますが、これはグロバール変数が解決された後にインクルードが動くためです。
下のコードをご覧ください。

<!-- BEGIN_MODULE Blog_ChildList -->
<ul><!-- BEGIN blog:loop -->
	<li><a href="{url}">{name}</a></li>
        <!--#include file='/admin/entry/categoryblog_{bid}.html'--><!-- END blog:loop -->
</ul>
<!-- END_MODULE Blog_ChildList -->

ここでは、ブログリストでブログ毎にインクルードをしてこようとしていますが、{bid} はモジュールの変数なのでインクルード文より後で解決されます。
つまり、インクルード文が実行される段階では"blog_{bid}"というファイルを探しにいってしまい、うまく動作しません。