템플릿 문법 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="이름"을 주면 검증 규칙도 연결됩니다. 자동 주입을 끄려면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로 전환하는 것을 권장합니다.