範本語法 v1(舊版)
範本 v1 是從 XE 時期沿用至今的語法。既有資源大多以此語法製作,因此為了維護與參考而加以整理。新資源請以範本語法 v2製作。
輸出
{$variable}
{$object->method()}
{$array[$key]}若在第一個大括號後面緊接空白,或中間有換行,就不會運作({ $name } 不會輸出)。
篩選器與 v2 相同。
{$var|lower|escape}
{$timestamp|date:'Y-m-d H:i'}
{$number|number_format}條件與迴圈:HTML 註解風格
<!--@if($condition)-->
<div>참</div>
<!--@else-->
<div>거짓</div>
<!--@endif-->
<!--@foreach($list as $key => $item)-->
<li>{$item->title}</li>
<!--@endforeach--><!--@for(...)--> <!--@while(...)--> 也是同樣的方式。
屬性風格:cond / loop
這是 v1 最具特色的語法。以屬性的形式在標籤上加上條件・迴圈。
<div cond="$is_logged">로그인 상태에서만 보임</div>
<li loop="$list => $key, $item">{$item->title}</li>也可以有條件地加上屬性值本身。
<option value="foo" selected="selected"|cond="$val === 'foo'">FOO</option>
<input type="checkbox" checked="checked"|cond="$item->checked" />想要不用標籤就包在一起時,請使用 <block>(v2 不支援此語法)。
<block cond="$show">
여러 요소를 한 번에
</block>PHP 程式碼
{@ $foo = 'bar'}
{@
$foo = 'bar';
if ($condition):
$enabled = true;
endif;
}注意:{@ ... } 只會比對到第一個 } 為止。若在程式碼中使用大括號區塊(if (...) { ... }),就會被截斷。請使用 if (...): / endif; 風格。
引入與資源載入
<include target="_header.html" />
<include target="^/common/tpl/refresh.html" /> <!--// ^ 는 사이트 루트 -->
<include target="_promo" cond="$show_promo" />
<load target="css/skin.css" />
<load target="css/skin.css" media="print" index="20" />
<load target="js/skin.js" type="body" />
<unload target="js/old.js" /><!--#include(...)-->、<!--%import(...)-->、<!--%load_js_plugin(...)--> 是更舊的寫法,請勿再新使用。
註解
<!-- 출력에 남는 일반 HTML 주석 -->
<!--// 출력에서 제거되는 템플릿 주석 -->自動功能(v1・v2 共通)
- 資源路徑自動轉換:像
<img src="img/icon.png" />這樣使用相對路徑時,會轉換為以面板路徑為基準的絕對路徑後輸出。 - 表單自動注入:
<form method="post">會自動加上 mid・act・CSRF 等必要的 hidden 欄位。指定ruleset="name"時,也會連結驗證規則。若要關閉自動注入,請使用rx-autoform="false";若只想排除 error_return_url,請使用no-error-return-url="true"。 - 自動跳脫:在檔案最上方宣告
<config autoescape="on" />,所有{$var}輸出都會套用跳脫。未宣告的舊檔案不會跳脫,輸出使用者輸入時請特別注意。
與 v2 的關係
- v1 語法會持續運作,在 v2 檔案中,部分
cond屬性(<include>的條件)、{$var}輸出與{@ }程式碼也相容。 - 反之,在 v1 檔案中,
@if等 v2 指令不會運作。判斷基準是檔案第一行是否宣告@version(2)。 - 修改既有 v1 面板時,建議維持以 v1 修改,大幅重製時再轉換為 v2。