phpsource/템플릿2008. 7. 16. 01:08
written: 2008.07.15
last modified: 2008.07.22
템플릿 변수
템포2에서 제공하는 템플릿 변수 태그는 없습니다. PHP 태그를 이용하여 이 기능을 수행합니다.
[code html;gutter:false] <p>[[[ <?=$TEMPO_VAR?> ]]]</p> [/code]
< Template file : tempo.sample.htm >
[code php;gutter:false] <?php require_once('class.Tempo2.php'); $tempo = &new Tempo2; $tempo->parse('sample', 'tempo.sample.htm'); $TEMPO_VAR = 'The value assigned by PHP global variable'; $tempo->el['sample']->assign(); $tempo->el['sample']->output(); ?> [/code]
< PHP coding >
[code html;gutter:false] <p>[[[ The value assigned by PHP global variable ]]]</p> [/code]
< Result >
다이나믹 블록 요소(Dynamic Block Element)
다이나믹 블록은 정적인 템플릿 문서의 내용을 동적으로 할당할 수 있도록 해 줍니다. 템플릿 문서를 템포2에 의해 파싱하게 되면 모든 다이나믹 블록 요소가 독립적인 객체로 존재하게 되며 각 블록 요소의 객체를 통해 블록 요소의 내용을 동적으로 변경하여 할당할 수 있습니다. 블록 요소의 태그는 <tempo id="블록요소명" 속성>블록요소내용</tempo>와 같은 형식을 가지고 있습니다.
[code html;gutter:false] <table> <tr> <th>classify</th> <th>column1</th> <th>column2</th> <th>column3</th> </tr> <tempo id="eLoop"> <tr> <td><?=$column0?></td> <td><?=$column1?></td> <td><?=$column2?></td> <td><?=$column3?></td> </tr> </tempo> </table> [/code]
< Template contents >
<tempo id="블록요소명" 속성>블록요소내용</tempo> 대신에 <@블록요소명 속성>블록요소내용</@>와 같은 축약된 형식을 사용할 수 있습니다. 만약 블록요소내용이 필요하지 않는 경우에는 <tempo id="블록요소명" 속성 /> 또는 <@블록요소명 속성 />와 같은 형식을 사용할 수도 있습니다.
템포2 속성(TEMPO2 attribute statements)
템포2에서 지정할 수 있는 속성에는 'id', 'src', 'selected', 'display', 'ctype'이 있습니다.
  • id - 블록요소명
  • selected - 자동 할당을 선택하는 속성
  • display - 블록요소의 출력유무 선택
  • ctype - 블록 문서의 형식을 지정
  • src - 인클루드할 파일명 지정
  • switch - 각 경우의수를 선택할 스위치 변수 지정 (0.0.1-beta2 추가)
속성은 속성명과 속성값으로 구성되어 있으며, 속성값은 필요한 경우에만 설정하며, 설정하더라도 변수(PHP 코드)는 포함할 수 없습니다.
속성 id
속성 id는 블록요소명을 지정할 때 사용하며, 또한 파싱후 다루게 될 각 블록요소에 해당하는 객체를 다루는 블록 핸들로도 사용됩니다. 따라서 하나의 실행 스크립트 문서 내에서 중복될 수 없는 유일한 이름이어야 합니다. 예를들면,
[code html;gutter:false] <tempo id="eLoop"> ... </tempo> [/code]
속성 selected
템포2는 배열형식의 변수값에 의해 블록요소가 자동으로 할당되지 않습니다. 부모 블록요소를 할당하기 전에 반드시 자식 블록요소를 먼저 할당해야 합니다. 자식 블록요소를 먼저 할당하지 않고 부모 블록요소를 할당하면 자식 블록요소 부분에 아무 것도 나타나지 않습니다.
[code html;gutter:false] <table> <tr> <th>column1</th> <th>column2</th> <th>column3</th> </tr> <tempo id="eLoop"> <tr> <td><?=$column1?></td> <td><?=$column2?></td> <td><?=$column3?></td> </tr> </tempo> </table> [/code]
< Template contents >
블록요소 'eLoop'를 할당하지 않고 템플릿 문서를 할당하여 출력하면 아래와 같이 블록요소 'eLoop'는 나타나지 않습니다.
[code html;gutter:false] <table> <tr> <th>column1</th> <th>column2</th> <th>column3</th> </tr> </table> [/code]
만약 자식 블록요소 'eLoop'를 사용자가 할당하지 않고 템포2 내에서 자동 할당하려면 속성 selected를 지정합니다. 이 속성은 속성명만 가지며 속성값을 필요로 하지 않습니다.
[code html;gutter:false] <tempo selected> ... </tempo> [/code]
속성 display
display 속성값을 'none'로 설정하면 블록요소를 출력하지 않습니다. selected 속성이 동시에 지정되어 있더라도 출력되지 않습니다.
[code html;gutter:false] <tempo display="none"> ... </tempo> [/code]
속성 ctype
[code html;gutter:false] <table border=1> <tr> <th>ctype</th><th>result</th> </tr> <tr> <td>default</td><td> <tempo selected> <span style="color:red;"><?=$VAR?></span> </tempo> </td> </tr> <tr> <td>text</td><td> <tempo ctype="text" selected> <span style="color:red;"><?=$VAR?></span> </tempo> </td> </tr> <tr> <td>html</td><td> <tempo ctype="html" selected> <span style="color:red;"><?=$VAR?></span> </tempo> </td> </tr> <tr> <td>php</td><td> <tempo ctype="php" selected> <span style="color:red;"><?=$VAR?></span> </tempo> </td> </tr> </table> [/code]
< Template contents : tempo.sample.htm >
[code php;gutter:false] <?php require_once('class.Tempo2.php'); $tempo = &new Tempo2; $tempo->parse('sample', 'tempo.sample.htm'); $VAR = 'apple'; $tempo->el['sample']->assign(); $tempo->el['sample']->output(); ?> [/code]
< PHP coding >
ctype result
default apple
text <span style="color:red;"><?=$VAR?></span>
html <?=$VAR?>
php <span style="color:red;">apple</span>
속성 src
인클루드할 파일명을 지정할 때 사용하는 속성으로 src 속성을 포함하고 있는 템플릿 문서를 기준으로하는 상대경로를 지정합니다.
[code html;gutter:false] <p><tempo src="sub/sample.htm" /></p> [/code]
만약 상대경로가 아닌 절대경로로 지정하려면 '/'로 시작하는 웹서버 루트를 기준으로 지정합니다.
[code html;gutter:false] <p><tempo src="/home/templates/sub/sample.htm" /></p> [/code]
scr 속성을 갖는 블록요소는 selected 속성을 지정하지 않아도 자동 할당됩니다.
src 속성을 사용하는 예를 들면,
[code html;gutter:false] [[[ <?=$TEMPO_VAR?> ]]] [/code]
< Template file : tempo.sub.htm >
[code php;gutter:false] <p><tempo src="tempo.sub.htm" /></p> [/code]
< Template file : tempo.main.htm >
[code php;gutter:false] <?php require_once('class.Tempo2.php'); $tempo = &new Tempo2; $tempo->parse('eRoot', 'tempo.main.htm'); $TEMPO_VAR = "The value assigned by PHP global variable"; $tempo->el['eRoot']->assign(); $tempo->el['eRoot']->output(); ?> [/code]
< PHP coding >
[code html;gutter:false] <p>[[[ The value assigned by PHP global variable ]]]</p> [/code]
< Result >
속성 switch
PHP 문서에서 아래와 같은 스위치문을 많이 보셨을 것입니다.
[code php;gutter:false] <?php switch ($var_name) { case 'apple': print '나는 사과입니다.'; break; case 'pear': print '나는 배입니다.'; break; case 'orange': print '나는 오렌지입니다.'; break; } ?> [/code]
switch 속성을 이용하면 아래와 같이 같은 기능을 수행하는 템플릿 문서를 작성할 수 있습니다.
[code html;gutter:false] <tempo switch="$var_name"> %apple% 나는 사과입니다. | %pear% 나는 배입니다. | %orange% 나는 오렌지입니다. </tempo> [/code]
< tempo.sample.htm >
PHP 스크립트 문서에서 switch 속성을 갖는 다이나믹 블록의 상위 블록요소를 할당하기 전에 전역변수 $var_name의 값을 아래와 같이 지정하면 됩니다.
[code php;gutter:false] <?php require_once('class.Tempo2.php'); $tempo = &new Tempo2; $tempo->parse('sample', 'tempo.sample.htm'); $var_name = 'pear'; $tempo->el['sample']->assign(); $tempo->el['sample']->output(); ?> [/code]
src 속성과 마찬가지로 switch 속성을 갖는 블록요소는 selected 속성을 지정하지 않아도 스위치 변수의 값에 의해 해당 항목이 자동 할당됩니다.
아래와 같이 속성명 switch를 생략한 채 스위치 변수명 $var_name 만으로 된 축약된 형식으로 나타낼 수 있습니다.
[code html;gutter:false] <@$var_name> %apple% 나는 사과입니다. | %pear% 나는 배입니다. | %orange% 나는 오렌지입니다. </@> [/code]
switch 속성을 갖는 블록요소에 블록요소명(id)을 지정할 때는 축약된 형식을 사용할 수 없으며 반드시 아래와 같이 축약되지 않은 형식을 사용하여야 합니다.
[code html;gutter:false] <tempo id="SWITCH_TEST" switch="$var_name"> %apple% 나는 사과입니다. | %pear% 나는 배입니다. | %orange% 나는 오렌지입니다. </tempo> [/code]
인덱스키는 생략할 수 있으며 생략하게 되면 앞에서부터 1, 2, 3, 4, 5가 자동으로 지정됩니다.
[code html;gutter:false] <tempo switch="$var_name"> 첫번째값 | 두번째값 | 세번째값 | 네번째값 | 다섯번째값 </tempo> [/code]
조건에 맞는 항목이 없을 때는 아무런 값도 출력하지 않습니다. 그러나 예약어 'default' 라는 인덱스키로 지정된 항목을 작성하면 조건에 맞는 항목이 없을 때 default로 지정된 항목을 출력할 수 있습니다.
[code html;gutter:false] <tempo switch="$var_name"> 첫번째값 | 두번째값 | 세번째값 | 네번째값 | %default% 기본값 </tempo> [/code]
위의 예제의 경우에 PHP에서 전역 변수 $var_name에 0과 같은 1, 2, 3, 4 이외의 값을 할당한다면 default로 지정된 항목 "기본값"이 출력됩니다.
만약 아래의 경우와 같이 중간에 있는 항목에만 인덱스키를 지정한 경우를 살펴보겠습니다.
[code html;gutter:false] <tempo switch="$var_name"> 첫번째값 | 두번째값 | %mid% 중간값 | 네번째값 | %default% 기본값 </tempo> [/code]
각 경우에 지정된 인텍스키를 보면 앞에서부터 1, 2, 'mid', 4, 'default'입니다.
템플릿 문서에서 인덱스키가 숫자로만 구성되어 있으면 정수로 인식하며, 기타의 경우는 모두 문자열로 인식합니다. 따라서 스위치 변수에 값을 지정할 때 숫자로만 구성된 인덱스키를 문자열로 지정할 수 없으며 반드시 정수값으로 지정하여야 합니다.
switch 속성을 갖는 블록요소도 다른 블록요소와 동일하게 처리하기 때문에 제한없이 모든 속성의 다이나믹 블록과 함께 중첩할 수 있습니다.
※ switch 속성은 0.0.1-beta2 버전부터 사용할 수 있습니다.
URL 리디렉션(URL redirection)
템플릿 문서 내에 존재하는 그림이나 동영상과 같은 리소스의 경로는 현 템플릿 문서 위치를 기준으로 작성됩니다. 이와같이 현 템플릿 문서를 기준으로 작성된, 즉 상대경로를 지정된 파일들의 경로를 현재 실행중인 PHP 문서 기준으로 리디렉션하여 줍니다. 확장자가 htm, html, css, js, gif, jpg, jpeg, png, swf, php, php3인 파일이 리디렉션하려는 경로에 실제로 존재할 때 리디렉션해줍니다.
※ php, php3 확장자는 0.0.1-beta2 버전부터 사용할 수 있습니다.
기타 다른 확장자를 가진 파일이나 디렉토리를 리디렉션하려면 블록요소객체의 멤버인 pathTPL 변수를 이용합니다. pathTPL 멤버변수에는 현 템플릿 파일문서의 경로가 저장되어 있습니다.
[code html;gutter:false] <p> <tempo> <img src="<?=$this->pathTPL?>/images/logo.gif"> </tempo> </p> [/code]

'phpsource > 템플릿' 카테고리의 다른 글

{템포2}5.다이나믹블록  (0) 2008.07.16
{템포2}4.멤버함수  (0) 2008.07.16
{템포2}2.기초다지기  (0) 2008.07.16
{템포2}1.소개  (0) 2008.07.16
{후키템플릿}8.1.필터 기능  (0) 2008.05.31
Posted by 방글24