Main Page | Namespace List | Class Hierarchy | Class List | File List | Class Members | File Members | Related Pages

Repeat.php

Go to the documentation of this file.
00001 <?php 00002 /* vim: set expandtab tabstop=4 shiftwidth=4: */ 00003 // 00004 // Copyright (c) 2003 Laurent Bedubourg 00005 // 00006 // This library is free software; you can redistribute it and/or 00007 // modify it under the terms of the GNU Lesser General Public 00008 // License as published by the Free Software Foundation; either 00009 // version 2.1 of the License, or (at your option) any later version. 00010 // 00011 // This library is distributed in the hope that it will be useful, 00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 // Lesser General Public License for more details. 00015 // 00016 // You should have received a copy of the GNU Lesser General Public 00017 // License along with this library; if not, write to the Free Software 00018 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00019 // 00020 // Authors: Laurent Bedubourg <laurent.bedubourg@free.fr> 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(); // now $temp points to the loop data 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 // $g->execute($loop.'->prepare()'); 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 }

Generated on Tue Jun 29 23:40:06 2004 for Mediawiki by doxygen 1.3.7