php模板简单写法
这是一个简单的用php 实现的模板教程物。 <?php class TEMPLATE { private $path = "."; //根目录 private $var; private $tplDir = "template"; //模板存储目录 private $tplExt = "tpl"; //模板文件的后缀名 private $tplId = 0; //模板的ID号 private $compileDir = "template_c"; //编译后的php文件存放目录 private $isCache = false; //是否用缓存 (默认不启动) private $cacheId = 1; //缓存文件ID号 private $cacheLeftTime = 3600; //缓存有效期 (默认保存3600秒) private $cacheDir = "cache"; //缓存文件存储目录 private $autoRefresh = false; //是否自动刷新 private $pattern = array( "/({dw:)s*includes*filename=s*"( . + . . +) s * "s*(/})/i", //包含文件 "/({dw:)s*field.(.+)s*(/})/i", //局部变量 "/({dw:)s*global.(.+)s*(/})/i", //全局变量 "/({dw:)s*foreachs*(.+)s*ass*(.+)s*(/})/i", //foreach 语句 "/({dw:)s*ends*foreachs*(/})/i", //foreach 结束 "/({dw:)s*ifs*((.+))(/})/i", "/({dw:)s*elseifs*((.+))(/})/i", "/({dw:)s*elses*(/})/i", "/({dw:)s*ends*ifs*(/})/i", ); private $replacement = array( '<?php echo $this->inc_file("\2"); ?>', "<?php echo $\2;?>", "<?php global $\2;n echo $\2; ?>", "<?php foreach($\2 as $\3){ ?>", "<?php } ?>", "<?php if (\2) { ?>", "<?php }else if(\2){ ?>", "<?php }else{ ?>", "<?php } ?>", ); //构造函数 function __construct($path = "", $tplDir = "", $compileDir = "", $isCache = "", $cacheLeftTime = "", $cacheDir = "", $autoRefresh = "") { $this->path = $path ? $path : $this->path; $this->tplDir = $tplDir ? $tplDir : $this->tplDir; $this->compileDir = $compileDir ? $compileDir : $this->compileDir; $this->isCache = is_bool($isCache) ? $isCache : $this->isCache; $this->cacheLeftTime = $cacheLeftTime ? $cacheLeftTime : $this->cacheLeftTime; $this->cacheDir = $cacheDir ? $cacheDir : $this->cacheDir; $this->autoRefresh = is_bool($autoRefresh) ? $autoRefresh : $this->autoRefresh; } //兼容php4 function TEMPLATE($path = "", $tplDir = "", $compileDir = "", $isCache = "", $cacheLeftTime = "", $cacheDir = "", $autoRefresh = "") { $this->__construct($path = "", $tplDir = "", $compileDir = "", $isCache = "", $cacheLeftTime = "", $cacheDir = "", $autoRefresh = ""); } function __get($property) { return $this->$property; } function __set($property, $value) { return $this->$property = $value; } //给模板中的变量赋值 // $tplVal 模板中的变量名 function assign($tplVal, $value = "") { if (is_array($tplVal)) { foreach ($tplVal as $key => $val) { if (!empty($key)) $this->var[$key] = $val; } } else { if (!empty($tplVal)) $this->var[$tplVal] = $value; } } //输出文件内容函数 function display($tplFile, $tplId = 0, $cacheId = 1, $cacheLeftTime = "") { if (empty($tplFile)) die("Template " { $tplFile } " not exist !"); $this->cacheId = $cacheId ? md5($cacheId) : md5($this->cacheId); $cacheFile = $this->path . "/" . $this->cacheDir . "/" . $tplFile . $this->cacheId; if ($this->check_cache($cacheFile, $cacheLeftTime)) //当缓存文件存在且不过期时直接从缓存文件读取内容 { echo $this->read_file($cacheFile); } else { $tpl = $this->path . "/" . $this->tplDir . "/" . $tplFile . "." . $this->tplExt; $tplContent = $this->read_file($tpl); //读取模板文件的内容 $compileContent = $this->compile_file($tplContent); //对读取出来的文件进行编译 $this->tplId = $tplId ? $tplId : $this->tplId; $compileFile = $this->path . "/" . $this->compileDir . "/" . md5($this->tplId) . "" . $tplFile . ".php"; $this->write_file($compileFile, $compileContent); //将编译后的内容写入相应的文件中; @extract($this->var); ob_start(); include_once ($compileFile); $content = ob_get_contents(); ob_end_clean(); if ($this->isCache) { $this->write_file($cacheFile, $content); // 帮编译好的内容写入缓存文件 } echo $content; } } /* function trim_tag($content) { $content = str_replace($this->startTag,"",$content); $content = str_replace($this->endTag,"",$content); //$content = trim($content); return $content ; }*/ // 编译文件函数 function compile_file($content = null) { $content = $content ? $content : die("Compile fail!"); //$content = $this->trim_tag($content); $content = preg_replace($this->pattern, $this->replacement, $content); return $content; } //解析包含文件 function inc_file($filename, $tplId = "", $cacheId = "", $cacheLeftTime = "") { $file = $this->path . "/" . $this->tplDir . "/" . $filename; if (file_exists($file)) { $filename = str_replace("." . $this->tplExt, "", $filename); return $this->display($filename, $tplId, $cacheId, $cacheLeftTime); } else die("Template " { $filename } " not exist"); } //读取文件内容函数 function read_file($filename) { if (!file_exists($filename)) die("Read file fail"); return file_get_contents($filename); } //内容写入函数 function write_file($filename, $content, $mode = "wb") { $filename = trim($filename); $content = $content ? stripslashes(trim($content)) : exit(); if (!file_exists($filename)) { $array = explode("/", $filename); $count = count($array); $path = ""; for ($i = 0; $i < $count - 1; ++$i) { if (!file_exists($path.= $array[$i] . "/")) { mkdir($path, 0777); } } } $handle = fopen($filename, $mode); fwrite($handle, $content); fclose($handle); return true; } // 清除缓存 function clear_dir($dir = "") { $dir = $this->path . "/" . $dir; $handle = opendir($dir); if (file_exists($dir)) { while ($file = readdir($handle)) { if ($file != "." && $file != "..") unlink($dir . "/" . $file); } closedir($handle); return true; } else { return false; } } //清除所有缓存 function clear_all_cache() { if ($this->clear_dir($this->cacheDir) && $this->clear_dir($this->compileDir)) return true; } //检查缓存是否过期 function check_cache($cacheFile, $cacheLeftTime = "") { $cacheLeftTime = $cacheLeftTime ? $cacheLeftTime : $this->cacheLeftTime; if (!file_exists($cacheFile)) return false; $time = $this->get_time($cacheFile) + $cacheLeftTime; if ($time < time()) { unlink($cacheFile); return false; } return true; } // 获取文件最后编辑时间 function get_time($filename) { if (!file_exists($filename)) return false; return filemtime($filename); } }
本文地址:http://www.phprm.com/code/f4d8529f2a1937ccf0b9c8eb38556507.html
转载随意,但请附上文章地址:-)