개요
XE 1.x에서 이어진 라이믹스 템플릿 문법이다. HTML 태그·속성·주석 형태로 출력과 흐름 제어를 작성한다. 기존 자료와의 호환성을 위해 계속 지원하지만, 공식 매뉴얼은 라이믹스 2.2 이상을 대상으로 새 자료를 만들 때 v2를 권장한다.
데이터 출력과 변수
한 쌍의 중괄호 안에 변수나 PHP 표현식을 쓴다. 여는 중괄호 바로 다음의 공백이나 표현식 중간의 줄바꿈은 인식을 방해한다.
{$name}
{$oDocument->getTitleText()}
{$array[$key]}
일반 템플릿 변수는 Context를 통해 읽고 저장한다. 모듈에서 Context::set('name', $value)로 전달한 값을 템플릿의 $name으로 사용할 수 있다. 여러 자료가 같은 범위를 공유하므로 이름 충돌과 의도하지 않은 변경에 주의한다. 초전역변수와 $this는 예외이다.
출력 필터와 이스케이프
|로 필터를 연결하고 :로 옵션을 전달한다.
{$name|lower|escape}
{$timestamp|date:'Y-m-d H:i'}
| 필터 | 기능 |
|---|---|
| autoescape / autolang | 이중 인코딩 없이 이스케이프. autolang은 언어코드를 별도 취급 |
| escape / escapejs | 강제 HTML 이스케이프 / JS 문자열용 이스케이프 |
| noescape / json | 이스케이프 해제 / JSON 변환 |
| strip / strip_tags / trim | 태그 제거 / 앞뒤 공백 제거 |
| urlencode / lower / upper | URL 인코딩 / 소문자 / 대문자 |
| nl2br / join | 개행을 줄바꿈 태그로 변환 / 배열 합치기 |
| date | 날짜 포맷, 기본 Y-m-d H:i:s |
| format / number_format | 숫자에 천 단위 구분, 옵션은 소수 자릿수 |
| shorten / number_shorten | 숫자를 123.4K 등의 형태로 축약 |
| link | 문자열을 링크로 표시 |
파일 최상단에 아래 설정을 쓰면 뒤에 나오는 출력에 자동 이스케이프를 적용한다. v2의 문맥별 자동 처리와 같다고 가정하지 말고, JS 등 각 출력 위치에 맞는 처리를 확인한다.
<config autoescape="on" />
noescape는 필요한 위치에서만 사용한다. nl2br와 link는 원문 매뉴얼에서 자동으로 noescape가 적용되는 필터로 안내하므로 입력 데이터의 신뢰 범위를 확인한다.
조건문과 반복문
HTML 주석 안에 @if, @foreach 등을 넣는다.
<!--@if($items)-->
<!--@foreach($items as $item)-->
<div>{$item->title}</div>
<!--@endforeach-->
<!--@else-->
<p>항목이 없습니다.</p>
<!--@endif-->
종료는 <!--@end-->로 줄일 수도 있지만, 종류가 드러나는 종료문이 읽기 쉽다. 일반 태그의 cond·loop 속성과 가상 <block> 태그는 해석상의 문제가 있어 공식 매뉴얼이 사용을 권장하지 않는다.
속성 하나의 표시를 제어하는 |cond=""는 별도 문법이다.
<option value="yes" selected="selected"|cond="$value === 'yes'">예</option>
인클루드
경로는 현재 파일을 기준으로 하고, ^/로 라이믹스 설치 루트를 기준으로 지정할 수도 있다. 확장자 .html은 생략할 수 있다.
<include target="header.html" />
<include target="../notice.html" cond="$show_notice" />
<include target="^/common/tpl/refresh.html" />
리소스 로딩
<load target="style.scss" vars="$vars" />
<load target="print.css" media="print" index="20" />
<load target="script.js" type="body" index="10" />
<load target="./lang" />
<unload target="unused.js" />
target: 현재 템플릿 기준 경로.^/도 사용 가능하다.media: CSS의 출력 매체.index: 로딩 순서.vars: SCSS·LESS에 전달할 연관배열 또는 객체.- JS의
type: 기본head, 본문 뒤에서 실행하려면body. - 언어 파일은 폴더 단위로 불러오며, 언로딩은 로딩할 때와 같은 경로를 쓴다.
코어의 JS 플러그인을 불러오는 옛 문법도 지원한다.
<!--%load_js_plugin("ckeditor")-->
XML JS 필터는 기존 자료와의 호환을 위해 남아 있지만 신규 사용을 권장하지 않는다.
PHP 코드와 주석
{@ $title = '제목'; }
<!--// 출력 결과에 남지 않는 주석 -->
{@ ... } 안의 변수도 Context를 사용한다. 중괄호가 포함된 PHP 코드에 제약이 있으므로 복잡한 로직은 모듈 등으로 옮기는 편이 좋다. 일반 <?php ... ?>의 변수 범위는 다르므로 두 방식을 섞을 때 확인한다. 일반 HTML 주석은 응답에 남는다.
경로와 폼의 자동 처리
템플릿 안의 이미지 등 상대경로는 표시되는 URL에 맞추어 변환된다. srcset은 2.0.3부터 지원한다.
폼에는 현재 화면의 mid, act, error_return_url 등이 자동 추가될 수 있다. 필요한 액션·권한·CSRF 필드는 제작자가 확인해야 하며 자동 주입만을 전제로 구현하지 않는다. 2.0.15 이상에서는 rx-autoform="false"로 전체 자동 주입을 끌 수 있다.
<form action="/search" method="get" rx-autoform="false">
<input type="search" name="q" value="" />
<button type="submit">검색</button>
</form>
이 예제의 /search는 실제 검색 경로에 맞게 바꾼다.
같이 보기
출처
이 문서는 라이믹스 공식 매뉴얼을 바탕으로 설명과 예제를 정리하였다. 공식 매뉴얼은 CC BY-SA 4.0으로 배포된다. 원문의 기여 이력은 rhymix-docs 저장소에서 확인할 수 있다.