|
|
|
void loopLoad( string loop_id [, int buffer ] )
지정된 번호의 버퍼에 루프를 로드합니다. 버퍼의 기본값은 1 이며, 최상위루프면 1, 중첩루프면 2, 삼중첩루프면 3,..과 같이 중첩의 깊이를 지정합니다.
버퍼는 루프의 작업공간이라고 할 수 있습니다. 루프를 버퍼에 올려서 루프변수나 중첩루프를 할당한 후, 또 다른 루프를 같은 버퍼에 로드하면 먼저 작업한 루프는 자리를 비켜줍니다.
아래의 코드는 바르게 작동합니다.
index.php |
...
$letters=array('a','b','c');
$numbers=array(1, 2, 3, 4 );
$tpl->define('index', 'index.tpl');
$tpl->loopLoad('letter', 1);
for ($i=0,$s=count($letters); $i<$s; $i++) {
$tpl->loopPushAssign(array(
'element'=>$letters[$i]
), 1);
}
$tpl->loopLoad('number', 1);
for ($i=0,$s=count($numbers); $i<$s; $i++) {
$tpl->loopPushAssign(array(
'element'=>$numbers[$i]
), 1);
}
$tpl->print_('index');
...
|
index.tpl |
<div>{@number}{.element} {/}</div>
<div>{@letter}{.element} {/}</div>
|
>>output |
<div>1 2 3 4 </div>
<div>a b c </div>
|
loopPushAssign() 메서드에는 버퍼만 지정하고 별도의 루프아이디를 지정하지 않습니다. 지정된 버퍼에 올려져있는 루프를 사용하게 됩니다.
같은 루프아이디를 같은 버퍼로 두 번 이상 로드할 때도, 이전 작업 내용이 보존됩니다.
index.php |
...
$letter1=array('a','b','c');
$letter2=array('x','y');
$numbers=array(1, 2, 3, 4 );
$tpl->define('index', 'index.tpl');
$tpl->loopLoad('letter', 1);
for ($i=0,$s=count($letter1); $i<$s; $i++) {
$tpl->loopPushAssign(array(
'element'=>$letter1[$i]
), 1);
}
$tpl->loopLoad('number', 1);
for ($i=0,$s=count($numbers); $i<$s; $i++) {
$tpl->loopPushAssign(array(
'element'=>$numbers[$i]
), 1);
}
$tpl->loopLoad('letter', 1);
for ($i=0,$s=count($letter2); $i<$s; $i++) {
$tpl->loopPushAssign(array(
'element'=>$letter2[$i]
), 1);
}
$tpl->print_('index');
...
|
index.tpl |
<div>{@number}{.element} {/}</div>
<div>{@letter}{.element} {/}</div>
|
>>output |
<div>1 2 3 4 </div>
<div>a b c x y </div>
|
버퍼는, 루프를 정해진 클래스속성으로 참조복사함으로써 구현됩니다. 버퍼는 로딩된 루프자체이고, 다른 PHP코드와 충돌하지 않으며 메모리는 안전하게 해제됩니다.
loopLoad() 메서드에 버퍼를 2 이상으로 지정하면, 그 상위버퍼에 가장최근 만들어진 섹션으로 루프를 로딩합니다.
BUFFER 1 |
SECTION 1 |
BUFFER 1-2 |
SECTION 1-1 |
|
SECTION 1-2 |
|
SECTION 1-3 |
... |
|
|
|
|
SECTION 2 |
BUFFER 2-2 |
SECTION 2-1 |
|
SECTION 2-2 |
|
SECTION 2-3 |
... |
|
|
|
|
...
|
|
3중첩루프 예제 |
index.php |
...
$tpl->define(array('index'=>'index.tpl'));
$tpl->loopLoad('table', 1);
for ($i=0,$a='a'; $i<2; $i++) {
$tpl->loopPushAssign(array('num'=>$i), 1);
$tpl->loopLoad('record', 2);
for ($j=0; $j<2; $j++) {
$tpl->loopPushLoad('column', 3);
for ($k=0; $k<4; $k++) $tpl->loopPushAssign(array('chr'=>$a++),3);
}
}
$tpl->print_('index');
|
index.tpl |
{@ table}
{.num}
<table>
{@ record}
<tr><td>{.num}-{..index_}</td><td>{@column}{...chr} {/}</td></tr>
{/}
</table>
{/}
|
>>output |
0
<table>
<tr><td>0-0</td><td>a b c d </td></tr>
<tr><td>0-1</td><td>e f g h </td></tr>
<tr><td>0-2</td><td>i j k l </td></tr>
</table>
1
<table>
<tr><td>1-0</td><td>m n o p </td></tr>
<tr><td>1-1</td><td>q r s t </td></tr>
<tr><td>1-2</td><td>u v w x </td></tr>
</table>
|
루프를 한 번 할당하고 템플릿파일에서 여러 번 사용할 수도 있습니다.
index.php |
...
$letters=('a','b','c');
$tpl->define('index', 'index.tpl');
));
$tpl->loopLoad('letter', 1);
for ($i=0,$s=count($letters); $i<$s; $i++) {
$tpl->loopPushAssign(array(
'element'=>$letters[$i]
), 1);
}
$tpl->print_('index');
...
|
index.tpl |
<div>{@letter}{.element} {/}</div>
<div>{@letter}{.index_}:{.element}, {/}</div>
|
>>output |
<div>a b c </div>
<div>0:a, 1:b, 2:c, </div>
|
|
|