本文へスキップ
ドキュメント

開発者ガイド

テンプレート構文 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 ディレクティブは動作しません。ファイルの1行目に @version(2) を宣言しているかどうかが基準です。
  • 既存の v1 スキンを修正するときはそのまま v1 で修正し、大きく作り直すときに v2 へ移行することをおすすめします。