| 
<?
/*
 PHTML::Template class
 Copiright (C) 2003, 2004, Gregory A. Rozanoff
 
 This library is free software; you can redistribute it and/or
 modify it under the terms of the GNU Lesser General Public
 License as published by the Free Software Foundation; either
 version 2.1 of the License, or (at your option) any later version.
 This library is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 Lesser General Public License for more details.
 You should have received a copy of the GNU Lesser General Public
 License along with this library; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
 class tpl {
 var
 $TEMPLATE,
 $tplExt    = ".tpl";
 
 // Front-End functions
 
 function tpl($tpl) {
 $this->templateDir = PATH."/templates/";
 $this->cacheDir = "d:/localhost/tmp/cache/tpl/";    // Change it!!!
 $this->start = $this->_getmicrotime();
 $this->TEMPLATE = $this->templateDir.$tpl.$this->tplExt;
 $this->CACHE = $this->cacheDir.$tpl.$this->tplExt;
 if (DEBUG) @unlink($this->CACHE);
 }
 
 function done($_root = 'root') {
 global $$_root;
 header("Content-Type: text/html; charset=".CHARSET);
 ob_start(GZIP ? 'ob_gzhandler' : NULL);
 ob_implicit_flush(FALSE);
 if (!file_exists($this->CACHE)) $this->_compile();
 foreach ($$_root as $key => $val) $$key = $val;
 require $this->CACHE;
 $uptime = round(($this->_getmicrotime() - $this->start) * 1000000) / 1000;
 echo "\n\t<!-- ".$uptime." mS -->";
 ob_end_flush();
 unset($this);
 }
 
 // Back-End functions
 
 function _compile() {
 $tpl = $this->summon($this->TEMPLATE);
 while (preg_match("/<TMPL_INCLUDE\s+([^\s>]+)\s*>/i", $tpl, $regs))
 $tpl = str_replace($regs[0], $this->summon($this->templateDir.$regs[1].$this->tplExt), $tpl);
 while (preg_match("/<TMPL_LOOP\s+(\w+)\s*>/i", $tpl, $r))
 $tpl = str_replace($r[0], "<?reset(\$".$r[1].");foreach(\$".$r[1]." as \$".$r[1]."_item){if(is_array(\$".$r[1]."_item))foreach(\$".$r[1]."_item as \$key=>\$val) \$\$key=\$val;?>", $tpl);
 while (preg_match("/<TMPL_(IF|UNLESS)\s+([^\s>]+)\s*>/i", $tpl, $r))
 $tpl = str_replace($r[0], "<?if(".('UNLESS' == strtoupper($r[1]) ? "!" : "")."\$".$r[2]."){?>", $tpl);
 $tpl = str_replace("<TMPL_ELSE>", "<?}else{?>", $tpl);
 $tpl = preg_replace("/<\/TMPL_(IF|UNLESS|LOOP)>/i", "<?}?>", $tpl);
 $tpl = preg_replace("/<TMPL_VAR\s+([^\s>]+)\s*>/i", "<?=$\\1?>", $tpl);
 $tpl = ereg_replace("\r", "", $tpl);
 if (STRICT) {
 $tpl = preg_replace("/>[\r\t\n\s]+</si", "><", $tpl);
 $tpl = preg_replace("/<\!--([^>]*?)-->/si", "", $tpl);
 }
 $fp = fopen($this->CACHE, 'w'); fputs($fp, $tpl); fclose($fp);
 }
 
 function summon($fil) {
 if ($fp = @fopen($fil, "rb")) {
 $content = fread($fp, 1024*1024);
 fclose($fp);
 return $content;
 } return FALSE;
 }
 
 function _getmicrotime() {
 list($usec, $sec) = explode(" ",microtime());
 return ((float)$usec + (float)$sec);
 }
 
 }
 ?>
 |