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
转载随意,但请附上文章地址:-)