<?
/*
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);
}
}
?>
|