loopLoad()* 이전    다음    목록
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>
 이전 목록 다음 
 
Since 2003-03-03 hosted on vultr.com