written: Sep 20 2006
TR 용법은 1.2.0 버전부터 사용할 수 있으나 확정된 기능이 아니라 여러분의 의견을 수렴할 목적으로 미리 공개되는 제안서(proposal)입니다. 따라서 향후 업그레이드할 때 아래서 설명한 내용과 다르게 동작할 수 있으니 주의하시기 바랍니다.
TR 용법
TR(Table Record) 용법은 위즈윅 HTML 에디터를 가지고 템플릿 문서를 편집할 때 유용하게 사용될 수 있을 것입니다. 아래와 같이 테이블의 각 행을 반복적으로 처리하는 경우에 블록변수 시작 및 종료태그가 <table> 태그와 <tr> 태그 사이에 위치하게 됩니다.
[code html;gutter:false]
<table cellpadding="0" cellspacing="0" border="0">
<!-- BEGIN DYNAMIC BLOCK: DSP_BLOCK_ARTICLES -->
<tr>
<td style='padding-left:5;'>
{block_articles}
</td>
</tr>
<!-- END DYNAMIC BLOCK: DSP_BLOCK_ARTICLES -->
</table>
[/code]
이 문을 위즈윅 HTML 에디터로 보면 블록변수가 보이지 않으며, 따라서 HTML 문서를 수정할 때 매우 조심하여 작업하지 않으면 블록변수 태그가 손실될 우려가 높습니다. 블록변수를 보이게 하기 위하여 주석문 형식 대신에 {@DSP_BLOCK_ARTICLES} ... {/} 형식을 사용하게 되면 위즈윅 HTML 에디터가 소스를 변형하는 경우도 발생하며, 또 HTML 문서 규약에 맞지도 않기때문에 제대로 보이지 않습니다.
만약 블록변수 태그가 위즈윅 HTML 에디터에 나타난다면 HTML 스크립트 편집 작업이 훨씬 수월할 것입니다. 오래전부터 이 문제를 어떻게 개선할 수 없을까 고민하다가 일단 proposal로 그 구문형식을 제안합니다.
위에서 예를 든 블록변수를 새로 제안된 TR 블록변수로 작성한다면 아래와 같을 것입니다.
[code html;gutter:false]
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td style='padding-left:5;'>
{@DSP_BLOCK_ARTICLES;tr=1}{block_articles}{/}
</td>
</tr>
</table>
[/code]
위 문자에서와 같이 변수옵션 tr을 1로 지정하게 되면 템플릿 문서를 컴파일할 때 아래와 같이 지정된 tr 옵션에 의해 변수의 위치가 <tr>...</tr> 태그 밖으로 이동되어 컴파일됩니다.
[code html;gutter:false]
<table cellpadding="0" cellspacing="0" border="0">
{@DSP_BLOCK_ARTICLES}
<tr>
<td style='padding-left:5;'>
{block_articles}
</td>
</tr>
{/}
</table>
[/code]
이와같이 TR 태그의 위치를 변수 옵션 tr에 의해 조정할 수 있다는 의미에서 'TR 용법'이라고 이름지어 봤습니다.
3겹으로 중첩된 블록변수에서의 TR 용법
TR 용법을 응용하여 좀 더 복잡한 템플릿 문서를 작성하여 보겠습니다. 3겹으로 중첩된 블록변수로 작성된 문서입니다.
[code html;gutter:false]
<!-- filename : block.htm -->
<TABLE border="1">
<TR>
<TD>
{@a;tr=1}{sample_a}
<TABLE border="1">
<TR>
<TD>
{@b;tr=1}{sample_b}
<TABLE border="1">
<TR>
<TD>
{@c;tr=1}{sample_c}{/}
</TD>
</TR>
</TABLE>
{/}
</TD>
</TR>
</TABLE>
{/}
</TD>
</TR>
</TABLE>
[/code]
위의 템플릿 문서를 처리하기 위한 PHP 문장은 아래와 같습니다.
[code php;gutter:false]
<?php
include_once('./class/template/class.hTemplate.php');
$tpl = new hTemplate('./templates', .....);
$tpl->define(
array(
'main' => 'block.htm'
)
);
for($i=0;$i<3;$i++) {
$tpl->assign('sample_a', 'SAMPLE_a'.$i.'', true);
$tpl->assign('sample_b', '');
for($j=0;$j<3;$j++) {
$tpl->assign('sample_b', 'SAMPLE_b'.$j.'', true);
$tpl->assign('sample_c', '');
for($k=0;$k<3;$k++) {
$tpl->assign('sample_c', 'SAMPLE_c'.$k.'', true);
}
$tpl->assign('c', 'c');
}
$tpl->assign('b', 'b');
}
$tpl->assign('a', 'a');
$tpl->assign('MAIN', 'main');
$tpl->output('MAIN');
?>
[/code]
위의 PHP 문장을 실행하면 브라우저에는 아래와 같이 나타날 것입니다.
SAMPLE_a0SAMPLE_a1SAMPLE_a2
|
생성된 HTML 스크립트 소스는 아래와 같습니다.
[code html;gutter:false]
<table border="1">
<tr>
<td>
SAMPLE_a0SAMPLE_a1SAMPLE_a2
<table border="1">
<tr>
<td>
SAMPLE_b0SAMPLE_b1SAMPLE_b2
<table border="1">
<tr>
<td>
SAMPLE_c0SAMPLE_c1SAMPLE_c2
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
[/code]
참고로 템플릿 문서 block.htm을 위즈윅 HTLM 에디터에서 본다면 아래와 같이 나타날 것입니다. 이제는 에디터에서 블록변수의 위치를 확인하면서 작업할 수 있을 것입니다.
{@a;tr=1}{$sample_a}
|
같은 템플릿 문서를 가지고 PHP 문장만 변형시켜 TR 태그를 반복시켜 보겠습니다. 수정된 PHP 문장은 아래와 같습니다.
[code php;gutter:false]
<?php
include_once('./class/template/class.hTemplate.php');
$tpl = new hTemplate('./templates', .....);
$tpl->define(
array(
'main' => 'block.htm'
)
);
for($i=0;$i<2;$i++) {
$tpl->assign('sample_a', 'SAMPLE_a'.$i.'');
$tpl->assign('b', '');
for($j=0;$j<2;$j++) {
$tpl->assign('sample_b', 'SAMPLE_b'.$j.'');
$tpl->assign('c', '');
for($k=0;$k<2;$k++) {
$tpl->assign('sample_c', 'SAMPLE_c'.$k.'');
$tpl->assign('c', 'c', true);
}
$tpl->assign('b', 'b', true);
}
$tpl->assign('a', 'a', true);
}
$tpl->assign('MAIN', 'main');
$tpl->output('MAIN');
?>
[/code]
위의 PHP 문장을 실행하면 브라우저에는 아래와 같이 나타날 것입니다.
SAMPLE_a0
|
||||||
SAMPLE_a1
|
각 변수에서의 TR 용법
TR 용법은 블록변수뿐만 아니라 단순변수, 조건변수, 파일변수에서도 사용할 수 있습니다.
단순변수일 때 {&변수명;tr=1}변수내용{/}
조건변수일 때 {?변수명;tr=1}경우의수{/}
블록변수일 때 {@변수명;tr=1}블록내용{/}
파일변수일 때 {#변수명;tr=1}파일명{/}
조건변수일 때 {?변수명;tr=1}경우의수{/}
블록변수일 때 {@변수명;tr=1}블록내용{/}
파일변수일 때 {#변수명;tr=1}파일명{/}
그러나 각 변수마다 TR기능이 동작하는 방식에 약간의 차이가 존재합니다.
'phpsource > 템플릿' 카테고리의 다른 글
{후키템플릿}7.2.내용 형식 (0) | 2006.10.16 |
---|---|
{후키템플릿}8.7.내장 필터함수 (0) | 2006.10.13 |
{후키템플릿}6.1.특수문자의 표현 (0) | 2006.10.09 |
{후키템플릿}8.8.래핑(wrapping) (0) | 2006.09.29 |
{후키템플릿}8.6.사용자정의 필터 함수 (0) | 2006.09.29 |