00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 class PHPTAL_Attribute_TAL_Repeat extends PHPTAL_Attribute
00024 {
00025 var
$in =
"__in__";
00026 var
$out =
"__out__";
00027
00028 function
start(&$g, &$tag)
00029 {
00030 $g->setSource($tag->name(), $tag->line);
00031
00032 $g->doComment('
new loop');
00033 $exp =
new PHPTAL_Expression($g, $tag, $this->expression);
00034 $exp->setPolicy(
_PHPTAL_ES_RECEIVER_IS_TEMP);
00035 $err = $exp->prepare();
00036
if (PEAR::isError($err)) {
return $err; }
00037
00038 $this->out = $exp->getReceiver();
00039 $temp = $g->newTemporaryVar();
00040 $exp->setReceiver($temp);
00041 $err = $exp->generate();
00042
if (PEAR::isError($err)) {
return $err; }
00043
00044 $loop = $g->newTemporaryVar();
00045 $this->loop = $loop;
00046 $g->doAffectResult($loop,
00047 '&
new PHPTAL_LoopControler($__ctx__,
"'. $this->out . '", '
00048 . $temp .');');
00049 $g->doIf('PEAR::isError('.$loop.'->_error)');
00050 $g->doPrintVar($loop.'->_error');
00051 $g->doElse();
00052
00053 $g->doWhile($loop.'->isValid()');
00054
00055 }
00056
00057 function
end(&$g, &$tag)
00058 {
00059 $g->execute($this->loop.'->next()');
00060 $g->endBlock();
00061 $g->endBlock();
00062 $g->doComment('end loop');
00063 }
00064 }