実行順序
テンプレートファイル上での実行順序
テンプレートエンジンの実行順序は以下のようになります。
- グローバル変数を解決
- インクルード処理を解決
- setTemplateを処理(テンプレートの変数化)
- getTemplateを解決(変数の挿入)
- タッチモジュールを解決(デフォルトON)
- モジュール類を内側から解決(同じ階層の場合は下から)
- IFブロックを解決
- setRenderedを処理(解決済テンプレートを変数化)
- getRenderedを解決(変数の挿入)
テンプレートの実行順序を頭に入れておく事はテンプレートを作成していく上で非常に重要になってきます。
例えば、インクルード文を書くときに、グローバル変数を使ったパスで指定するテクニックがあります。
今 @include("/admin/entry/category%{CID}.html") 旧 <!--#include file='/admin/entry/category%{CID}.html'-->
上のコードは、正常に動きますが、これはグロバール変数が解決された後にインクルードが動くためです。
下のコードをご覧ください。
<!-- BEGIN_MODULE Blog_ChildList --> <ul><!-- BEGIN blog:loop --> <li><a href="{url}">{name}</a></li> @include("/admin/entry/categoryblog_{bid}.html")<!-- END blog:loop --> </ul> <!-- END_MODULE Blog_ChildList -->
ここでは、ブログリストでブログ毎にインクルードをしてこようとしていますが、{bid} はモジュールの変数なのでインクルード文より後で解決されます。
つまり、インクルード文が実行される段階では"blog_{bid}"というファイルを探しにいってしまい、うまく動作しません。