超级精简的php模板解析引擎iSmarty-PHP源码
1. [代码][PHP]代码
', $text); $text = str_replace('{/loop}', '', $text); $text = str_replace('{foreachelse}', '', $text); $text = str_replace('{/foreach}', '', $text); $text = str_replace('{else}', '', $text); $text = str_replace('{loopelse}', '', $text); // template pattern tags // $pattern = array( '/\$(\w*[a-zA-Z0-9_])/', '/\$this\-\>vars\[\'(\w*[a-zA-Z0-9_])\'\]+\.(\w*[a-zA-Z0-9])/', '/\{include file=(\"|\'|)(\w*[a-zA-Z0-9_\.][a-zA-Z]\w*)(\"|\'|)\}/', '/\{\$this\-\>vars(\[\'(\w*[a-zA-Z0-9_])\'\])(\[\'(\w*[a-zA-Z0-9_])\'\])?\}/', '/\{if (.*?)\}/', '/\{elseif (.*?)\}/', '/\{loop \$(.*) as (\w*[a-zA-Z0-9_])\}/', '/\{foreach \$(.*) (\w*[a-zA-Z0-9_])\=\>(\w*[a-zA-Z0-9_])\}/' ); // replacement PHP tags // $replacement = array( '$this->vars[\'\1\']', '$this->vars[\'\1\'][\'\2\']', 'display(\'\2\')?>', 'vars\1\3?>', '', '', 'vars[\'\2\']) {?>', 'vars[\'\2\']=>$this->vars[\'\3\']) {?>' ); // repalce template tags to PHP tags // $text = preg_replace($pattern, $replacement, $text); // create compile file // $compliefile = $this->compiledir . basename($tpl) . '.php'; if ($fp = @fopen($compliefile, 'w')) { fputs($fp, $text); fclose($fp); } } /* * assigns values to template variables * @param array|string $k the template variable name(s) * @param mixed $v the value to assign */ function assign($k, $v = null) { $this->vars[$k] = $v; } /* * ste directory where templates are located * @param string $str (path) */ function templateDir($path) { $this->templatedir = $this->pathCheck($path); } /* * set where compiled templates are located * @param string $str (path) */ function compileDir($path) { $this->compiledir = $this->pathCheck($path); } /* * check the path last character * @param string $str (path) * @return string */ function pathCheck($str) { return (preg_match('/\/$/', $str)) ? $str : $str . '/'; } /* * executes & displays the template results * @param string $tpl (template file) */ function display($tpl) { $tplfile = $this->templatedir . $tpl; if (!file_exists($tplfile)) { exit('can not load template file : ' . $tplfile); } $compliefile = $this->compiledir . $tpl . '.php'; if (!file_exists($compliefile) || filemtime($tplfile) > filemtime($compliefile)) { $this->parse($tplfile); } include_once($compliefile); } } ?>
2. [代码][PHP]代码
assign('title','标题'); $tpl->assign('Name','名字'); $contact = array('1'=>'张一','2'=>'zhang2'); $tpl->assign('contact',$contact); $tpl->display('test.html'); ?>
3. [代码][PHP]代码
无标题文档 {$title} - {$Name}
{foreach $contact key=>val} {$key}: {$val}
{/foreach}
4. [文件] test.zip
test.zip
PHP之友评论