written: Jan 28 2002
last modified: Sep 20 2006
last modified: Sep 20 2006
반복문 구문 형식의 제한
{변수명,경우의수}과 {변수명}와 같은 1.2.0 이전 버전까지 사용하던 템플릿변수 표현식에서는 아래와 같이 HTML의 스타일 문장의 예처럼 {font-family:verdana, arial}과 {font-family:굴림} 부분이 템플릿 변수의 구문형식과 동일하여 이 부분을 템플릿변수로 처리하는 해결하기 곤란한 버그가 있었습니다.
[code html;gutter:false]
<STYLE>
BODY, table {font-family:verdana, arial}
myTD {font-family:굴림}
</STYLE>
[/code]
1.2.0 버전부터는 {변수명:반복문,경우의수}과 {변수명:반복문}과 같은 구문형식을 허용하지 않습니다. 1.2.0 버전에서 반복문을 사용하기 위하여는 아래와 같이 1.2.0 버전부터 추가된 새로운 구문형식을 이용하여야 합니다.
{변수명;반복문}
{?변수명;반복문}경우의수{/}
{?변수명;반복문}경우의수{/}
정리하면 아래와 같습니다.
종 류 | 舊구문형식 | 新구문형식 | ||
---|---|---|---|---|
구문형식 | 예제 | 구문형식 | 예제 | |
단순변수 | {변수명::초기값} | {VAR} {VAR::100} |
{변수명;반복문;초기값} | {VAR;1-3} {VAR;1-3;100} |
스위치문 | {변수명::초기값,경우의수} | {VAR,A|B|C} {VAR::2,A|B|C} |
{?변수명;반복문;초기값}경우의수{/} | {?VAR;1-3}A|B|C{/} {?VAR;1-3;2}A|B|C{/} |
css 문과의 충돌을 피하기 위하여 반복문과 초기값을 구분하는 구분자를 콜론(:) 대신에 세미콜론(;)을 사용하도록 하였습니다.
변수 옵션 repeat
1.2.0 버전부터는 반복문 위치에 반복문 외에도 여러가지 변수 옵션을 지정할 수 있습니다. 지정할 수 있는 변수 옵션으로는 반복문을 의미하는 repeat 외에도 ctype, allow_filter, tr이 있습니다. 반복문 옵션인 repeat 외의 변수 옵션에 대하여는 5.1.템플릿 변수를 참조바랍니다.
{?VAR;1-3}A|B|C{/}
위는 조건변수에 반복문을 적용한 경우입니다. 이러한 반복문은 변수옵션 repeat를 이용하여 아래와 같이 작성할 수 있습니다.
{?VAR;repeat=1-3}A|B|C{/}
위의 2가지 조건변수들은 동일한 결과를 나타냅니다.
반복문
0.0.2 버전에서는 조건변수(스위치문)에서만 가능했던 반복문을 0.0.3 버전부터는 단순변수에까지 반복할 수 있도록 하였습니다.
아래와 같이 템플릿 파일 main.htm을 작성하면 템플릿 변수 {REPEAT}를 3번 반복하여 생성시킬 수 있습니다.
[code html;gutter:false]
<!-- NAME: main.htm -->
{REPEAT;6-8}
<!-- END: main.htm -->
[/code]
difine() 메소드에 의해 템플릿 파일이 분석될 때 템플릿 변수 {REPEAT}가 {REPEAT.6}, {REPEAT.7}, {REPEAT.8}으로 반복해서 생성될 것입니다.
[code php;gutter:false]
<?php
include_once('class.hTemplate.php');
$tpl = new hTemplate('./templates');
$tpl->define(
array(
'main' => 'main.htm',
)
);
$tpl->assign(
array(
'REPEAT.6' => '6<br>',
'REPEAT.7' => '7<br>',
'REPEAT.8' => '8<br>'
)
);
$tpl->assign('MAIN', 'main');
$tpl->output('MAIN');
?>
[/code]
이를 출력하면 아래와 같겠지요. 이와 같이 조건변수(스위치문)가 아니더라도 모든 템플릿 변수를 반복하여 생성시킬 수 있습니다.
6
7
8
7
8
반복되는 조건변수
대부분의 게시판 목록보기를 보면 아래와 같이 각 페이지에 직접 접근할 수 있도록 하단에 페이지 링크(이하 페이지 블록이라 칭함)를 제공합니다. 이것을 조건변수(스위치문)를 이용하여 템플릿에서 작성하려면 많은 노력이 필요할 것입니다. 그래서 대부분은 페이지 블록을 템플릿 변수 하나로 할당하여 나타내는 것이 일반적이지요.
페이지 블록의 전체 HTML 코드를 PHP 코드에서 assign() 함수를 이용하여 할당한다면 페이지 블록에 대한 디자인을 변경할 때 그 작업을 디자이너가 아닌 PHP 프로그래머가 담당해야 할 것입니다. 이는 템플릿툴을 이용하는 근본 취지에서 벗어나는 좋지 못한 방법이 될 것입니다.
이러한 문제를 극복하기 위하여 페이지 블록을 조건변수를 반복적으로 사용하여 작성할 수 있겠지요.
[code html;gutter:false]
{?Flag.0} {Num.0} | <A href="xxx">[{Num.0}]</A> {/}
{?Flag.1} {Num.1} | <A href="xxx">[{Num.1}]</A> {/}
{?Flag.2} {Num.2} | <A href="xxx">[{Num.2}]</A> {/}
{?Flag.3} {Num.3} | <A href="xxx">[{Num.3}]</A> {/}
{?Flag.4} {Num.4} | <A href="xxx">[{Num.4}]</A> {/}
{?Flag.5} {Num.5} | <A href="xxx">[{Num.5}]</A> {/}
{?Flag.6} {Num.6} | <A href="xxx">[{Num.6}]</A> {/}
{?Flag.7} {Num.7} | <A href="xxx">[{Num.7}]</A> {/}
{?Flag.8} {Num.8} | <A href="xxx">[{Num.8}]</A> {/}
{?Flag.9} {Num.9} | <A href="xxx">[{Num.9}]</A> {/}
[/code]
위에서 {Flag.0}부터 {Flag.9}까지 동일한 구성으로 반복되는 것을 볼 수 있습니다. 이와 같이 구성이 반복되는 조건변수의 경우에는 아래와 같이 간단하게 나타낼 수 있습니다.
[code html;gutter:false]
{?Flag;9} {Num;} | <A href="xxx">[{Num;}] {/}
[/code]
만약 0이 아닌 0보다 큰 수부터 시작하고 싶으면 아래와 같이 시작하는 정수 인덱스를 지정하면 됩니다. 시작하는 정수 인덱스는 위에서와 같이 생략할 수 있지만 마지막 정수 인덱스는 항상 지정하여야 합니다.
[code html;gutter:false]
{?Flag;5-9} {Num;} | <A href="xxx">[{Num;}] {/}
[/code]
이것은 hTemplateParser 클래스에 의해 아래와 같이 전개됩니다.
[code html;gutter:false]
{?Flag.5} {Num.5} | <A href="xxx">[{Num.5}]</A> {/}
{?Flag.6} {Num.6} | <A href="xxx">[{Num.6}]</A> {/}
{?Flag.7} {Num.7} | <A href="xxx">[{Num.7}]</A> {/}
{?Flag.8} {Num.8} | <A href="xxx">[{Num.8}]</A> {/}
{?Flag.9} {Num.9} | <A href="xxx">[{Num.9}]</A> {/}
[/code]
페이지 블록의 HTML 코드를 PHP 코드로 생성하지 않고 이와 같이 반복되는 조건변수를 이용하면 디자인을 나모와 같은 웹에디터에서 보다 쉽게 변경할 수 있을 것입니다.
[주의] 버전 0.0.2 패치1부터는 반복되는 조건변수 내의 변수 중 반복해야할 변수에는 {Num;}와 같이 ';' 문자 붙여야 하며 반복해서는 안될 변수에는 {_SERVER.PHP_SELF}와 같이 ';' 문자를 붙여서는 안됩니다.
[주의] 버전 1.2.0부터는 콜론(:) 문자 대신에 세미콜론(;) 문자를 사용합니다.
[code html;gutter:false]
{?Flag;2}
{Num;} |
<A href="{_SERVER.PHP_SELF}?page={Num;}>[{Num;}]</A>
{/}
[/code]
'phpsource > 템플릿' 카테고리의 다른 글
{후키템플릿}7.5.리소스 리디렉션 (0) | 2006.09.20 |
---|---|
{후키템플릿}7.3.논리 부정 연산자 (0) | 2006.09.20 |
{후키템플릿}6.3.멤버 템플릿변수 (0) | 2006.09.20 |
{후키템플릿}4.3.컴파일 환경 설정 (0) | 2006.09.20 |
{후키템플릿}4.2.캐시 환경 설정 (0) | 2006.09.20 |