기본 템플릿 문법

기본 템플릿 문법

Rhymix/XE의 템플릿 문법은 HTML 태그에 특별한 속성을 추가하여 동적인 기능을 구현하는 방식입니다.

조건문 (cond)

조건문은 특정 조건이 참일 때만 해당 요소를 출력합니다.

기본 사용법

<!-- 조건이 참일 때만 출력 -->
<div cond="$is_logged">
    로그인되었습니다.
</div>

<!-- 조건이 거짓일 때 출력 (! 사용) -->
<div cond="!$is_logged">
    로그인이 필요합니다.
</div>

block 태그 사용

HTML 요소 없이 조건만 체크하려면 <block> 태그를 사용합니다:

<block cond="$member_info">
    <p>회원명: {$member_info->nick_name}</p>
    <p>포인트: {$member_info->point}</p>
</block>

속성 조건부 출력

특정 속성만 조건부로 출력할 수 있습니다:

<!-- disabled 속성을 조건부로 추가 -->
<button disabled="disabled"|cond="!$grant->write">
    글쓰기
</button>

<!-- class를 조건부로 추가 -->
<li class="active"|cond="$mid == 'board'">
    게시판
</li>

복잡한 조건

<!-- AND 조건 -->
<div cond="$is_logged && $member_info->is_admin == 'Y'">
    관리자 메뉴
</div>

<!-- OR 조건 -->
<div cond="$act == 'dispBoardWrite' || $act == 'dispBoardModify'">
    글쓰기 폼
</div>

<!-- 배열/객체 확인 -->
<table cond="count($list) > 0">
    <!-- 게시글 목록 -->
</table>

반복문 (loop)

반복문은 배열이나 컬렉션의 각 항목에 대해 HTML을 반복 출력합니다.

기본 사용법

<!-- 간단한 반복 -->
<ul>
    <li loop="$list => $item">
        {$item->title}
    </li>
</ul>

<!-- 키값 포함 -->
<ul>
    <li loop="$list => $key, $item">
        {$key}. {$item->title}
    </li>
</ul>

block 태그로 반복

<table>
    <block loop="$document_list => $no, $document">
    <tr>
        <td>{$no}</td>
        <td>{$document->title}</td>
        <td>{$document->nick_name}</td>
    </tr>
    </block>
</table>

for 스타일 반복

<!-- 1부터 10까지 반복 -->
<select>
    <option loop="$i=1;$i<=10;$i++" value="{$i}">
        {$i}
    </option>
</select>

중첩 반복문

<div loop="$categories => $category">
    <h3>{$category->title}</h3>
    <ul>
        <li loop="$category->children => $child">
            {$child->title}
        </li>
    </ul>
</div>

파일 포함 (include)

다른 템플릿 파일을 포함시킵니다:

<!-- 헤더 포함 -->
<include target="header.html" />

<!-- 변수 전달 -->
<include target="item.html" item="$document" />

<!-- 조건부 포함 -->
<include target="admin_menu.html" cond="$logged_info->is_admin == 'Y'" />

리소스 로드 (load)

CSS, JS, XML 필터 등을 로드합니다:

<!-- CSS 파일 로드 -->
<load target="style.css" />

<!-- JavaScript 파일 로드 -->
<load target="script.js" />

<!-- body 태그 끝에 JS 로드 -->
<load target="script.js" type="body" />

<!-- XML JS 필터 로드 -->
<load target="filter/insert.xml" />

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

<!-- 외부 리소스 로드 -->
<load target="https://cdn.example.com/library.js" />

리소스 제거 (unload)

이미 로드된 리소스를 제거합니다:

<!-- 특정 CSS 제거 -->
<unload target="unwanted.css" />

<!-- 특정 JS 제거 -->
<unload target="unwanted.js" />

주석

템플릿 컴파일 시 제거되는 주석:

<!--@if($cond)-->
    조건부 내용
<!--@else-->
    다른 내용
<!--@endif-->

<!--// 한 줄 주석 -->

<!--/* 
    여러 줄 주석
    이 내용은 컴파일된 파일에 포함되지 않습니다.
*/-->

변수 출력

<!-- 기본 출력 -->
<p>{$title}</p>

<!-- 객체 속성 -->
<p>{$document->title}</p>

<!-- 배열 요소 -->
<p>{$array['key']}</p>

<!-- 기본값 설정 -->
<p>{$title ?: '제목 없음'}</p>

<!-- HTML 이스케이프 -->
<p>{htmlspecialchars($content)}</p>

<!-- HTML 그대로 출력 (주의!) -->
<div>{$content|noescape}</div>

특수 변수

<!-- Context 인스턴스 -->
{$oContext}

<!-- 현재 모듈 정보 -->
{$module_info->mid}
{$module_info->browser_title}

<!-- 로그인 정보 -->
{$logged_info->member_srl}
{$logged_info->nick_name}

<!-- 언어 변수 -->
{$lang->cmd_write}

<!-- XE 경로 -->
{$xe_path}

<!-- 현재 URL -->
{$current_url}

실전 예제

게시판 목록

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

<p cond="!$document_list">
    등록된 게시글이 없습니다.
</p>

로그인 폼

<block cond="!$is_logged">
    <form action="{getUrl('act', 'procMemberLogin')}" method="post">
        <input type="hidden" name="success_return_url" value="{$current_url}" />

        <div>
            <label for="uid">아이디</label>
            <input type="text" name="user_id" id="uid" required />
        </div>

        <div>
            <label for="upw">비밀번호</label>
            <input type="password" name="password" id="upw" required />
        </div>

        <button type="submit">로그인</button>
    </form>
</block>

<block cond="$is_logged">
    <p>{$logged_info->nick_name}님 환영합니다!</p>
    <a href="{getUrl('act', 'dispMemberLogout')}">로그아웃</a>
</block>