Rhymix/XE 템플릿 문법

Rhymix/XE 템플릿 문법

기본 문법

cond (조건문)

cond는 condition의 약자로, 조건에 따라 요소를 표시하거나 숨길 때 사용합니다.

기본 사용법
<!-- count($list)가 있으면 표시 -->
<tr cond="count($list)">
    <td>리스트가 있습니다</td>
</tr>

<!-- count($list)가 없으면 표시 (느낌표 ! 사용) -->
<tr cond="!count($list)">
    <td>리스트가 없습니다</td>
</tr>

loop (반복문)

loop는 배열이나 객체를 반복하여 출력할 때 사용합니다.

기본 사용법
<!-- HTML 요소에 직접 사용 -->
<table>
    <tr loop="$list=>$item">
        <td>{$item->title}</td>
    </tr>
</table>

<!-- block 태그 사용 -->
<table>
    <block loop="$list=>$item">
        <tr>
            <td>{$item->title}</td>
        </tr>
    </block>
</table>

새 템플릿 문법 (XE Core 1.4.4+)

XE Core 1.4.4 버전부터 추가된 새로운 템플릿 문법입니다.

장점

  • 간결함: 스킨의 소스 코드를 약 절반 정도로 줄일 수 있습니다
  • 가독성: HTML 태그 기반으로 조건문과 반복문의 시작-끝을 쉽게 파악할 수 있습니다
  • 편집기 지원: 코드 접기/펼치기 기능을 지원하는 편집기에서 매우 편리합니다

조건문

문법 설명
<block cond="조건식">...</block> 조건식이 참이면 포함된 내용을 출력
<p cond="조건식">...</p> 조건식이 참이면 <p> 요소와 함께 내용을 출력
<p attr="value"│cond="조건식">...</p> <p> 요소는 항상 출력하되, 조건식이 참이면 attr="value" 속성 추가
예제
<!-- block 사용 -->
<block cond="$logged_info">
    <p>환영합니다, {$logged_info->nick_name}님!</p>
</block>

<!-- HTML 요소에 직접 사용 -->
<div cond="$is_logged">
    <a href="{getUrl('act','dispMemberLogout')}">로그아웃</a>
</div>

<!-- 속성 조건부 출력 -->
<li class="active"│cond="$mid == 'board'">
    <a href="{getUrl('mid','board')}">게시판</a>
</li>

반복문

문법 설명
<block loop="변수명=>$val">...</block> $key 없이 반복
<tr loop="변수명=>$val">...</tr> $key 없이 요소와 함께 반복
<block loop="변수명=>$key,$val">...</block> $key 포함하여 반복
<tr loop="변수명=>$key,$val">...</tr> $key 포함하여 요소와 함께 반복
<block loop="$i=0;$i<100;$i++">...</block> for문 형식의 반복
예제
<!-- 기본 반복 -->
<ul>
    <li loop="$menu_list=>$menu">
        <a href="{$menu->url}">{$menu->text}</a>
    </li>
</ul>

<!-- key값 포함 반복 -->
<select>
    <option loop="$lang_list=>$key,$val" value="{$key}">{$val}</option>
</select>

<!-- for문 형식 -->
<select name="year">
    <option loop="$i=2020;$i<=2030;$i++" value="{$i}">{$i}년</option>
</select>

include문

다른 템플릿 파일을 포함할 때 사용합니다.

문법 설명
<include target="header.html" /> header.html 파일을 포함
예제
<include target="header.html" />
<div class="content">
    <!-- 콘텐츠 -->
</div>
<include target="footer.html" />

load문

CSS, JavaScript, XML 필터 파일을 로드할 때 사용합니다.

문법 설명
<load target="style.css" /> CSS 파일을 <head>에 포함
<load target="script.js" /> JS 파일을 <head>에 포함
<load target="script.js" type="body" /> JS 파일을 <body> 끝에 포함
<load target="filter.xml" /> XML JS 필터를 포함
예제
<!-- CSS 로드 -->
<load target="css/style.css" />
<load target="//fonts.googleapis.com/css?family=Noto+Sans+KR" />

<!-- JavaScript 로드 -->
<load target="js/common.js" />
<load target="js/main.js" type="body" />

<!-- 조건부 로드 -->
<load target="css/admin.css" cond="$logged_info->is_admin == 'Y'" />

unload문

이미 로드된 파일을 제외할 때 사용합니다.

문법 설명
<unload target="style.css" /> 경로가 일치하는 CSS 파일 제외
<unload target="script.js" /> 경로가 일치하는 JS 파일 제외
예제
<!-- 특정 페이지에서 기본 스타일 제외 -->
<unload target="common/css/xe.css" />
<load target="css/custom.css" />

호환성 참고사항

  • 새 템플릿 문법은 XE Core 1.4.4 이상에서만 작동합니다
  • 하위 호환성이 필요한 경우 기존 문법을 사용해야 합니다
  • 기존 템플릿 문법도 계속 유효하며 사용 가능합니다

실전 예제

게시판 리스트

<table cond="$document_list">
    <thead>
        <tr>
            <th>번호</th>
            <th>제목</th>
            <th>작성자</th>
            <th>날짜</th>
        </tr>
    </thead>
    <tbody>
        <tr loop="$document_list=>$no,$document">
            <td>{$no}</td>
            <td><a href="{getUrl('document_srl',$document->document_srl)}">{$document->title}</a></td>
            <td>{$document->nick_name}</td>
            <td>{$document->regdate}</td>
        </tr>
    </tbody>
</table>

<div cond="!$document_list" class="no-article">
    게시물이 없습니다.
</div>

로그인 폼

<div cond="!$is_logged" class="login-form">
    <form action="{getUrl('')}" method="post">
        <input type="hidden" name="act" value="procMemberLogin" />
        <input type="text" name="user_id" placeholder="아이디" />
        <input type="password" name="password" placeholder="비밀번호" />
        <button type="submit">로그인</button>
    </form>
</div>

<div cond="$is_logged" class="logged-info">
    <span>{$logged_info->nick_name}님</span>
    <a href="{getUrl('act','dispMemberLogout')}">로그아웃</a>
</div>