跳到主要內容
文件

開發者指南

範本語法 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。