热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一个用DISCUZ模板解析函数写的模板类

*作者:旭日EMAIL:54ano@163.comhttp:www.wrcms.com使用方法:解析的方法来自DISCUZ的template.class.phpdefine
/*
作者:旭日
EMAIL:54ano@163.com
http://www.wrcms.com
使用方法:解析的方法来自DISCUZ的template.class.php

define(T_ROOT, dirname(__FILE__));定义根目录
$tpl = new Template(T_ROOT, T_ROOT.'/default', 'index', 'index');声明类
$tpl->getCacheDir(T_ROOT.'./Cache');声明缓存目录
$tpl->setVar('sitename', $sitename);声明变量
$tpl->Display();显示
$tpl->Save();保存成目标文件
*/

class Template {

var $pClassName = 'PTS Template';//类名称
var $pClassVersion = '';//版本
var $pTplDir = '';//模板目录
var $pTplFileExt = '.htm';//模板文件扩展名
var $pTplFileName = '';//模板文件名
var $pObjFileExt = '.html';//目标文件扩展名
var $pObjDir = '';//目标目录
var $pObjFileName = '';//目标文件名
var $pCacheDir = './Cache';//缓存目录
var $pVarval = array();
var $pContent = '';

function Template($ObjDir, $TplDir, $ObjFileName, $TplFileName, $ObjFileExt='.html', $TplFileExt='.htm') {
$this->getObjDir($ObjDir);
$this->getTplDir($TplDir);
$this->getObjFileName($ObjFileName);
$this->getTplFileName($TplFileName);
$this->getObjFileExt($ObjFileExt);
$this->getTplFileExt($TplFileExt);
}

function getTplDir($value) {
$this->pTplDir = $value;
}

function getTplFileName($value) {
$this->pTplFileName = $value;
}

function getTplFileExt($value) {
$this->pTplFileExt = $value;
}

function getObjFileName($value) {
$this->pObjFileName = $value;
}

function getObjDir($value) {
$this->pObjDir = $value;
}

function getObjFileExt($value) {
$this->pObjFileExt = $value;
}

function getCacheDir($value) {
$this->pCacheDir = $value;
}

function setVar($varname, $value = '') {
$this->pVarval[$varname] = $value;
}

function Display() {
extract($this->pVarval);
$this->parseToCache($this->pTplFileName);
include $this->pCacheDir.'/'.$this->pTplFileName.'.tpl.php';
}

function Save() {
ob_start();
$this->Display();
$content = ob_get_contents();
ob_end_clean();
$p = fopen($this->pObjDir.'/'.$this->pObjFileName.$this->pObjFileExt, 'w');
fwrite($p, $content);
fclose($p);
}

function parseToCache($TplFileName) {
$p = fopen($this->pTplDir.'/'.$TplFileName.$this->pTplFileExt, 'r');
$this->pContent = fread($p, filesize($this->pTplDir.'/'.$TplFileName.$this->pTplFileExt));
fclose($p);
$this->Parse();
$p = fopen($this->pCacheDir.'/'.$TplFileName.'.tpl.php', 'w');
fwrite($p, $this->pContent);
fclose($p);
}

function Parse() {
extract($this->pVarval);
$nest = 5;
$this->pContent = preg_replace("/([\n\r]+)\t+/s", "\\1", $this->pContent);
$this->pContent = preg_replace("/\<\!\-\-\{(.+?)\}\-\-\>/s", "{\\1}", $this->pContent);
$this->pContent = str_replace("{LF}", "", $this->pContent);
$this->pContent = preg_replace("/\{((\\\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)(\[[a-zA-Z0-9_\-\.\"\'\[\]\$\x7f-\xff]+\])*)\}/is", "\n\n", $this->pContent);
$this->pContent = preg_replace("/[\n\r\t]*\{include\s+([a-z0-9_]+)\}[\n\r\t]*/ies", "Template::parseInclude('\\1')", $this->pContent);
$this->pContent = preg_replace("/[\n\r\t]*\{echo\s+(.+?)\}[\n\r\t]*/is", "\n\n", $this->pContent);
$this->pContent = preg_replace("/[\n\r\t]*\{elseif\s+(.+?)\}[\n\r\t]*/is", "\n\n", $this->pContent);
$this->pContent = preg_replace("/[\n\r\t]*\{else\}[\n\r\t]*/is", "\n\n", $this->pContent);
for($i = 0; $i < $nest; $i++) {
$this->pContent = preg_replace("/[\n\r\t]*\{loop\s+(\S+)\s+(\S+)\}[\n\r]*(.+?)[\n\r]*\{\/loop\}[\n\r\t]*/is", "\n\n\\3\n\n", $this->pContent);
$this->pContent = preg_replace("/[\n\r\t]*\{loop\s+(\S+)\s+(\S+)\s+(\S+)\}[\n\r\t]*(.+?)[\n\r\t]*\{\/loop\}[\n\r\t]*/is", "\n \\3) { ?>\n\\4\n\n", $this->pContent);
$this->pContent = preg_replace("/[\n\r\t]*\{if\s+(.+?)\}[\n\r]*(.+?)[\n\r]*\{\/if\}[\n\r\t]*/is", "\n\n\\2\n\n", $this->pContent);
}
$this->pContent = preg_replace("/\{(\\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\}/s", "", $this->pContent);
}

function parseInclude($value) {
echo 'aa';
$this->parseToCache($value);
return '';
}

}

3 个解决方案

#1


这么好,怎么没人顶

#2


没什么意思,有能力就弄一个像织梦CMS里的模块解析引擎那么强大的东西

#3


没怎么看懂~~~

推荐阅读
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
author-avatar
淘宝杂谈网z
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有