- 浏览: 412935 次
- 性别:
- 来自: 深圳
-
文章分类
最新评论
-
wcjagta:
...
dedecms插件开发教程 -
xc2013:
看起来不错 先下载来试试
ECSHOP完全静态化解决方法 -
greemranqq:
你好,我在xp 上做实验,也是JS css带不过来,关于 ro ...
nginx资源定向 css js路径问题 -
hotsmile:
表结构给出来吧,测试的提示说要注册,
中国移动CMPP短信开发平台通讯包 2.8 -
mengdejun:
gang80306176 写道这个插件怎么用和安装普通插件一样 ...
phpcms2008 sp4单网页编辑器插件
Template.class.php Discuz 模板引擎
<?php /** * 模板类 - 使用 Discuz 模板引擎解析 * * @package classes * @copyright Copyright (c) 2007-2008 (http://www.tblog.com.cn) * @author Akon(番茄红了) <aultoale@gmail.com> * @license PHP Version 3.0 {@link http://www.php.net/license/3_0.txt } */ require_once ('functions/template.func.php'); class Template { const DIR_SEP = DIRECTORY_SEPARATOR; /** * 模板实例 * * @staticvar * @var object Template */ protected static $_instance; /** * 模板参数信息 * * @var array */ protected $_options = array(); /** * 单件模式调用方法 * * @static * @return object Template */ public static function getInstance() { if (!self::$_instance instanceof self) self::$_instance = new self(); return self::$_instance; } /** * 构造方法 * * @return void */ private function __construct() { $this->_options = array( 'template_dir' => 'templates' . self::DIR_SEP, //模板文件所在目录 'cache_dir' => 'templates' . self::DIR_SEP . 'cache' . self::DIR_SEP, //缓存文件存放目录 'auto_update' => false, //当模板文件改动时是否重新生成缓存 'cache_lifetime' => 0, //缓存生命周期(分钟),为 0 表示永久 ); } /** * 设定模板参数信息 * * @param array $options 参数数组 * @return void */ public function setOptions(array $options) { foreach ($options as $name => $value) $this->set($name, $value); } /** * 设定模板参数 * * @param string $name 参数名称 * @param mixed $value 参数值 * @return void */ public function set($name, $value) { switch ($name) { case 'template_dir': $value = $this->_trimpath($value); if (!file_exists($value)) $this->_throwException("未找到指定的模板目录 \"$value\""); $this->_options['template_dir'] = $value; break; case 'cache_dir': $value = $this->_trimpath($value); if (!file_exists($value)) $this->_throwException("未找到指定的缓存目录 \"$value\""); $this->_options['cache_dir'] = $value; break; case 'auto_update': $this->_options['auto_update'] = (boolean) $value; break; case 'cache_lifetime': $this->_options['cache_lifetime'] = (float) $value; break; default: $this->_throwException("未知的模板配置选项 \"$name\""); } } /** * 通过魔术方法设定模板参数 * * @see Template::set() * @param string $name 参数名称 * @param mixed $value 参数值 * @return void */ public function __set($name, $value) { $this->set($name, $value); } /** * 获取模板文件 * * @param string $file 模板文件名称 * @return string */ public function getfile($file) { $cachefile = $this->_getCacheFile($file); if (!file_exists($cachefile)) $this->cache($file); return $cachefile; } /** * 检测模板文件是否需要更新缓存 * * @param string $file 模板文件名称 * @param string $md5data 模板文件 md5 校验信息 * @param integer $md5data 模板文件到期时间校验信息 * @return void */ public function check($file, $md5data, $expireTime) { if ($this->_options['auto_update'] && md5_file($this->_getTplFile($file)) != $md5data) $this->cache($file); if ($this->_options['cache_lifetime'] != 0 && (time() - $expireTime >= $this->_options['cache_lifetime'] * 60)) $this->cache($file); } /** * 对模板文件进行缓存 * * @param string $file 模板文件名称 * @return void */ public function cache($file) { $tplfile = $this->_getTplFile($file); if (!is_readable($tplfile)) { $this->_throwException("模板文件 \"$tplfile\" 未找到或者无法打开"); } //取得模板内容 $template = file_get_contents($tplfile); //过滤 <!--{}--> $template = preg_replace("/\<\!\-\-\{(.+?)\}\-\-\>/s", "{\\1}", $template); //替换语言包变量 //$template = preg_replace("/\{lang\s+(.+?)\}/ies", "languagevar('\\1')", $template); //替换 PHP 换行符 $template = str_replace("{LF}", "<?=\"\\n\"?>", $template); //替换直接变量输出 $varRegexp = "((\\\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)" . "(\[[a-zA-Z0-9_\-\.\"\'\[\]\$\x7f-\xff]+\])*)"; $template = preg_replace("/\{(\\\$[a-zA-Z0-9_\[\]\'\"\$\.\x7f-\xff]+)\}/s", "<?=\\1?>", $template); $template = preg_replace("/$varRegexp/es", "addquote('<?=\\1?>')", $template); $template = preg_replace("/\<\?\=\<\?\=$varRegexp\?\>\?\>/es", "addquote('<?=\\1?>')", $template); //替换模板载入命令 $template = preg_replace( "/[\n\r\t]*\{template\s+([a-z0-9_]+)\}[\n\r\t]*/is", "\r\n<? include(\$template->getfile('\\1')); ?>\r\n", $template ); $template = preg_replace( "/[\n\r\t]*\{template\s+(.+?)\}[\n\r\t]*/is", "\r\n<? include(\$template->getfile(\\1)); ?>\r\n", $template ); //替换特定函数 $template = preg_replace( "/[\n\r\t]*\{eval\s+(.+?)\}[\n\r\t]*/ies", "stripvtags('<? \\1 ?>','')", $template ); $template = preg_replace( "/[\n\r\t]*\{echo\s+(.+?)\}[\n\r\t]*/ies", "stripvtags('<? echo \\1; ?>','')", $template ); $template = preg_replace( "/([\n\r\t]*)\{elseif\s+(.+?)\}([\n\r\t]*)/ies", "stripvtags('\\1<? } elseif(\\2) { ?>\\3','')", $template ); $template = preg_replace( "/([\n\r\t]*)\{else\}([\n\r\t]*)/is", "\\1<? } else { ?>\\2", $template ); //替换循环函数及条件判断语句 $nest = 5; for ($i = 0; $i < $nest; $i++) { $template = preg_replace( "/[\n\r\t]*\{loop\s+(\S+)\s+(\S+)\}[\n\r]*(.+?)[\n\r]*\{\/loop\}[\n\r\t]*/ies", "stripvtags('<? if(is_array(\\1)) { foreach(\\1 as \\2) { ?>','\\3<? } } ?>')", $template ); $template = preg_replace( "/[\n\r\t]*\{loop\s+(\S+)\s+(\S+)\s+(\S+)\}[\n\r\t]*(.+?)[\n\r\t]*\{\/loop\}[\n\r\t]*/ies", "stripvtags('<? if(is_array(\\1)) { foreach(\\1 as \\2 => \\3) { ?>','\\4<? } } ?>')", $template ); $template = preg_replace( "/([\n\r\t]*)\{if\s+(.+?)\}([\n\r]*)(.+?)([\n\r]*)\{\/if\}([\n\r\t]*)/ies", "stripvtags('\\1<? if(\\2) { ?>\\3','\\4\\5<? } ?>\\6')", $template ); } //常量替换 $template = preg_replace( "/\{([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\}/s", "<?=\\1?>", $template ); //删除 PHP 代码断间多余的空格及换行 $template = preg_replace("/ \?\>[\n\r]*\<\? /s", " ", $template); //其他替换 $template = preg_replace( "/\"(http)?[\w\.\/:]+\?[^\"]+?&[^\"]+?\"/e", "transamp('\\0')", $template ); $template = preg_replace( "/\<script[^\>]*?src=\"(.+?)\".*?\>\s*\<\/script\>/ise", "stripscriptamp('\\1')", $template ); $template = preg_replace( "/[\n\r\t]*\{block\s+([a-zA-Z0-9_]+)\}(.+?)\{\/block\}/ies", "stripblock('\\1', '\\2')", $template ); //添加 md5 及过期校验 $md5data = md5_file($tplfile); $expireTime = time(); $template = "<? if (!class_exists('template')) die('Access Denied');" . "\$template->getInstance()->check('$file', '$md5data', $expireTime);" . "?>\r\n$template"; //写入缓存文件 $cachefile = $this->_getCacheFile($file); $makepath = $this->_makepath($cachefile); if ($makepath !== true) $this->_throwException("无法创建缓存目录 \"$makepath\""); file_put_contents($cachefile, $template); } /** * 将路径修正为适合操作系统的形式 * * @param string $path 路径名称 * @return string */ protected function _trimpath($path) { return str_replace(array('/', '\\', '//', '\\\\'), self::DIR_SEP, $path); } /** * 获取模板文件名及路径 * * @param string $file 模板文件名称 * @return string */ protected function _getTplFile($file) { return $this->_trimpath($this->_options['template_dir'] . self::DIR_SEP . $file); } /** * 获取模板缓存文件名及路径 * * @param string $file 模板文件名称 * @return string */ protected function _getCacheFile($file) { $file = preg_replace('/\.[a-z0-9\-_]+$/i', '.cache.php', $file); return $this->_trimpath($this->_options['cache_dir'] . self::DIR_SEP . $file); } /** * 根据指定的路径创建不存在的文件夹 * * @param string $path 路径/文件夹名称 * @return string */ protected function _makepath($path) { $dirs = explode(self::DIR_SEP, dirname($this->_trimpath($path))); $tmp = ''; foreach ($dirs as $dir) { $tmp .= $dir . self::DIR_SEP; if (!file_exists($tmp) && !@mkdir($tmp, 0777)) return $tmp; } return true; } /** * 抛出一个错误信息 * * @param string $message * @return void */ protected function _throwException($message) { throw new Exception($message); } }
template.func.php
<?php /** * 模板替换中需要用到的函数 * * @package functions * @copyright Copyright (c) 2007-2008 (http://www.tblog.com.cn) * @author Akon(番茄红了) <aultoale@gmail.com> * @license PHP Version 3.0 {@link http://www.php.net/license/3_0.txt} */ function transamp($template) { $template = str_replace('&', '&', $template); $template = str_replace('&amp;', '&', $template); $template = str_replace('\"', '"', $template); return $template; } function stripvtags($expr, $statement) { $expr = str_replace("\\\"", "\"", preg_replace("/\<\?\=(\\\$.+?)\?\>/s", "\\1", $expr)); $statement = str_replace("\\\"", "\"", $statement); return $expr . $statement; } function addquote($var) { return str_replace("\\\"", "\"", preg_replace("/\[([a-zA-Z0-9_\-\.\x7f-\xff]+)\]/s", "['\\1']", $var)); } function stripscriptamp($s) { $s = str_replace('&', '&', $s); return "<script src=\"$s\" type=\"text/javascript\"></script>"; } function stripblock($var, $s) { $s = str_replace('\\"', '"', $s); $s = preg_replace("/<\?=\\\$(.+?)\?>/", "{\$\\1}", $s); preg_match_all("/<\?=(.+?)\?>/e", $s, $constary); $constadd = ''; $constary[1] = array_unique($constary[1]); foreach($constary[1] as $const) { $constadd .= '$__' . $const .' = ' . $const . ';'; } $s = preg_replace("/<\?=(.+?)\?>/", "{\$__\\1}", $s); $s = str_replace('?>', "\n\$$var .= <<<EOF\n", $s); $s = str_replace('<?', "\nEOF;\n", $s); return "<?\n$constadd\$$var = <<<EOF\n" . $s . "\nEOF;\n?>"; }
- discuztemplate.rar (5.3 KB)
- 下载次数: 13
发表评论
-
php异步操作类库
2011-06-05 16:01 2015httpclient for php 的选择常用方案有以 ... -
织梦HTTP IMAGE下载类
2011-06-05 14:57 1888<?php if(!defined('DEDEINC ... -
php汉字转拼音
2011-06-05 14:41 1633<?php /**************** ... -
PHP采集利器:Snoopy 试用心得
2011-06-05 14:34 14103Snoopy是一个php类,用 ... -
php异步调用 提高用户体验
2011-05-30 14:22 1338这是我的一个技术很好的朋友写的,要我发表在我的博客上可让php ... -
PHP 异步调用 后台调用 持续执行 断开连接/浏览器
2011-05-26 10:31 1740标题很怪,因为我也 ... -
php socket模拟POST GET请求 fsockopen版
2011-05-26 10:14 7439function httpRequestGET($url){ ... -
php socket GET POST提交方法(HttpClient) 框架
2011-05-25 18:29 5577<?php /* Version 0.9, 6th ... -
mantis
2011-05-25 09:50 1311mantis 缺陷管理平台Mantis,也做Mantis ... -
Curl参数一览
2011-05-06 17:30 1511* 目录 1. 介绍 ... -
PHPRPC
2011-04-24 11:01 1341PHPRPC 是一个轻型的、安全的、跨网际的、跨语言的、跨平台 ... -
PHP身份证验证程序
2011-04-24 10:56 1283<?php // 计算身份证校验码,根据国家标准GB 116 ... -
nginx 502 Bad Gateway 错误问题收集
2011-04-23 09:43 1825502是FastCGI出现问题,所以从FastCGI配置入手。 ... -
深入理解PHP内存管理之谁动了我的内存
2011-04-12 21:57 862首先让我们看一个问题: ... -
socket模拟post表单
2011-04-11 15:40 2866post的本质就是发送给目的程序一个标志为post的协议串如下 ... -
OAUTH协议
2011-04-09 09:59 1158OAUTH协议为用户资源的 ... -
nginx/windows: 让nginx以服务的方式运行
2011-04-09 09:33 1168在windows下安装了nginx, 郁闷是发现它没有以服 ... -
ThinkPHP处理海量数据分表机制详细代码
2011-04-07 18:27 7270应用ThinkPHP内置的分表算法处理百万级用户数据. ... -
php 分库分表hash算法
2011-04-07 18:16 1725//分库分表算法 function calc_hash_d ... -
nginx配置文件实例: php (fastcgi), perl, proxy, rrd, nagios
2011-04-06 20:33 1888nginx.conf worker_processes 5; ...
相关推荐
《深入理解DISCUZ模板类:使用与扩展》 DISCUZ是一款广泛应用于社区论坛建设的开源PHP系统,它的模板类是其核心功能之一,旨在为开发者提供方便、高效的界面设计工具。本文将深入探讨DISCUZ模板类的使用方法及其在...
高贵典雅模板】是一款专为Discuz! 论坛系统设计的界面样式,它旨在提升论坛的整体视觉效果,带给用户更为优雅、高贵的浏览体验。这款模板通常包含一系列CSS样式表、HTML文件、图片资源以及可能的JavaScript脚本,...
"分离自Discuz的模板类"指的是从Discuz!论坛系统中提取出来的模板处理类,这可能是为了方便开发者在其他项目中独立使用或者进行二次开发。 Discuz! 是一款基于PHP和MySQL的开源社区论坛软件,其强大的功能和灵活性...
《Discuz同城分类信息模板插件详解》 在互联网社区建设中,Discuz!作为一款广泛应用的开源论坛软件,以其强大的功能和灵活的扩展性深受广大站长喜爱。本篇文章将详细解析“Discuz同城分类信息模板插件”,帮助用户...
**标题:“Discuz 模板引擎类”** **概述** Discuz! 是一款知名的开源社区论坛软件,其模板引擎是其核心组成部分之一,用于处理和渲染论坛页面。模板引擎允许开发者通过HTML模板来控制和组织论坛的显示逻辑,将...
响应式图文类Discuz模板是基于Discuz! X框架设计的一种网站模板,它主要用于构建社区论坛网站,尤其适合那些希望创建内容丰富、图文并茂且能在不同设备上自适应显示的站点。Discuz! 是一个知名的开源社区软件,由...
模板系统是Discuz! 用来呈现网页界面的关键部分,它允许管理员或开发者通过修改HTML、CSS和JavaScript文件,来改变论坛的外观和功能展示。在Discuz! 3.4中,模板文件通常位于`template`目录下,根据不同的模板风格,...
模板X3.3是一款专为迪恩资讯媒体和课程干货分享设计的门户模板,适用于Discuz! 论坛系统。这款模板以其专业性和用户友好的界面,为用户提供了一个高效的信息发布和分享平台。以下是关于Discuz! 和这款模板的详细...
《时尚地方门户Discuz模板详解》 在互联网时代,地方门户是连接本地用户与信息、服务的重要桥梁。Discuz作为一款强大的社区论坛软件,被广泛应用于各类网站搭建,尤其是地方门户。本文将深入探讨“时尚地方门户...
《Discuz! 2.5家居门户模板详解与应用指南》 ... 2.5家居门户模板"为构建专业且美观的家居类社区提供了便捷的解决方案。通过深度理解和充分利用这款模板,可以打造出一个既吸引用户又易于管理的在线家居门户。
discuz仿魔客吧网站模板,带VIP购买等多个插件,包含DIY文件。... 模板可以用来做素材或图片以及建站资源的下载网站,站长可以结合discuz的出售商品功能实现销售系统,也可以...discuz_threadtypes_discuz模板下载.xml
对于初学者来说,理解和掌握Discuz模板的工作原理可能需要一些时间,但随着经验的积累,你会发现这是一个极具价值的技能,可以帮助你打造独一无二的社区环境。在互联网时代,拥有一个吸引人的论坛界面不仅能提升品牌...
1. 下载模板:首先,你需要从网络上下载到“discuz2x小米模板”的压缩包文件。 2. 解压文件:将压缩包解压,你会得到一个名为“xiaomi”的文件夹,其中包含了模板的所有文件。 3. 模板上传:登录你的Discuz! 2X后台...
而"missq模板"则是专为Discuz! 设计的一款主题样式,它为论坛带来了独特的视觉体验和交互设计,提升了用户在社区中的浏览和交流感受。 Missq模板的设计理念注重简洁与时尚,它的界面风格清新,色彩搭配和谐,符合...
NT模板集"是一个专为基于ASP.NET架构的Discuz!NT论坛系统设计的一系列模板集合。这些模板集旨在提供多样化的界面风格,满足不同用户和社区的需求,提升论坛的用户体验和视觉吸引力。 【描述】中提到的几个关键知识...
此模板是基于Discuz! X2版本开发的,旨在提升用户在论坛中的交互体验和视觉享受。Discuz! 是一款广泛应用的开源社区论坛软件,以其强大的功能和灵活的扩展性深受广大站长喜爱。 这款模板的核心特点是其导航设计。...
《Discuz! 唯美古典模板解析及应用》 Discuz! 是一款深受广大站长喜爱的开源社区论坛系统,其强大的功能和丰富的模版库为用户提供了个性化定制的可能。"Discuz! 唯美古典模板"是其中的一款主题,它以其独特的古典...
产品营销案例带手机端discuz企业模板是一套设计风格很大气时尚的公司企业产品展示类的网站模板。整站主要以红白色为主,红色给人看起来比较大气的感淘宝网,也是近几年除了蓝色外设计师比较喜欢的一个颜色。模板设计...
这款模板适用于Discuz! X2.5版本,集成了丰富的功能和多样的色彩搭配,旨在提升论坛的整体视觉效果,吸引更多的用户参与讨论。 首先,我们来了解一下Discuz! X系统。Discuz! 是一款全球用户量庞大的开源社区论坛...