<?php class iSmarty { /* * The name of the directory where templates are located. * @var string */ var $templatedir = '/'; /* * The directory where compiled templates are located. * @var string */ var $compiledir = 'test/'; /* * where assigned template vars are kept * @var array */ var $vars = array(); /* * compile a resource * sets PHP tag to the compiled source * @param string $tpl (template file) */ function parse($tpl) { // load template file // $fp = @fopen($tpl, 'r'); $text = fread($fp, filesize($tpl)); fclose($fp); // repalce template tag to PHP tag // $text = str_replace('{/if}', '<?php } ?>', $text); $text = str_replace('{/loop}', '<?php } ?>', $text); $text = str_replace('{foreachelse}', '<?php } else {?>', $text); $text = str_replace('{/foreach}', '<?php } ?>', $text); $text = str_replace('{else}', '<?php } else {?>', $text); $text = str_replace('{loopelse}', '<?php } else {?>', $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\']', '<?php $this->display(\'\2\')?>', '<?php echo \$this->vars\1\3?>', '<?php if(\1) {?>', '<?php } elseif(\1) {?>', '<?php if (count((array)\$\1)) foreach((array)\$\1 as \$this->vars[\'\2\']) {?>', '<?php if (count((array)\$\1)) foreach((array)\$\1 as \$this->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]代码
<?php include 'iSmarty.php'; $tpl = new iSmarty(); $tpl->assign('title','标题'); $tpl->assign('Name','名字'); $contact = array('1'=>'张一','2'=>'zhang2'); $tpl->assign('contact',$contact); $tpl->display('test.html'); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> </head> <body> <p>{$title} - {$Name}</p> {foreach $contact key=>val} {$key}: {$val}<br> {/foreach} </body> </html>