| 加入收藏| 设为首页| 联系我们

首页 站长学习 站长之家 源码下载 建站素材 书籍教程 常用工具
 您现在的位置: 动力中国 >> 网络编程 >> PHP教程 >> 文章正文  
 从PHP的模板引擎看Discuz!模板机制
 

从PHP的模板引擎看Discuz!模板机制

http://www.domcn.org  文章来源:www.ccvita.com  点击数:

  关键字:从PHP的模板引擎看Discuz!模板机制

前言
本文写于2007年11月,那时候我是在Discuz!开发组为PHPChina的《PHPer》写的稿,一直也没有发到blog上了,今天偶然之间记起,顺手转发过来。

一、关于模板引擎的前言
从phplib到smarty,再到Discuz!的模板机制,本文试图通过PHP模板引擎为你讲解作者自己的PHP心得。

我清楚的记得在我刚上大学开始学习PHP的时候,曾经在phpe.net看到过一篇关于phplib Template和FastTemplate这两模板引擎性能比较的文章。让我在接下来半年的时间内持续的使用着phplib。不可否认phplib是左右了一代PHP开发人员对于PHP模板引擎的认识。或许你也会对下面的方法比较熟悉

$t->set_file
$t->set_var

当我对于phplib的执行效率不满意的时候,我开始寻找下一个PHP的模板引擎,于是smarty跳入我的视野范围,当我费尽心血去学会了smarty并使用开发了很多东西,而现在的我突然发现记得的也就只有下面的方法了

$s->assign
$s->display

究竟我们需要模板引擎来做什么呢,MVC?简单?易用?效率?请看下文的分析。

二、程序处理的分析

1.PHPLIB的程序处理过程
从phplib的处理开始讲起

$t = new Template()
$t->set_file
$t->set_var
$t->parse
$t->p

看上面的代码,翻译成中文就是

  • 初始化模板类$t
  • 设置模板文件
  • 设置模板变量
  • 分析模板文件中的模板变量
  • 输出内容

通过了最少5个步骤在php程序中实现模板的处理

2.Smarty的程序处理过程
现在来看smarty的处理

$s = new Smarty
$s->assign
$s->display

翻译成中文就是

  • 初始化模板类$s
  • 设置模板变量
  • 解析并输出模板

3.Discuz!模板的程序处理过程

include template(tplname);

主要作用就是指定给程序需要处理的模板文件

在上述三种模板处理机制中,最容易理解和接受就是Discuz!模板的处理过程。初始化、设置变量、解析模板、输出内容,Discuz!只用了一个函数来做。对于一个开源的论坛软件,这样处理的好处是显而易见的,对于Discuz!进行二次开发的程序员的要求降低。简化模板语言,方便风格和插件的制作,这也在一定程度上促进了Discuz!的传播

三、模板源文件的语法

在phplib中处理循环嵌套的时候,使用:

<!--    BEGIN row   -->
{it}
<!--     END row    -->

在smarty中处理循环嵌套的时候,引入了

< {section name=loopName loop=$loopArray}>(当然还有foreach这样的)

在Discuz!中处理循环嵌套的时候,

<!--{loop $array $value}-->

其实真正的模板面对的可以说是不懂PHP或者懂一点PHP的美工同志们,模板的复杂就意味着美工制作页面的难度加大。在必不可少的需要模板有逻辑处理的时候,为什么不在html代码中使用原生态的PHP语法,而让美工相当于去学习另外一种语言呢?在我个人的经验中,显然是Discuz!的模板语言更为简单易学,也为我节省了更多的时间。

四、Discuz!模板处理机制
我剥离出一个简单的Discuz!模板处理函数

function template($file, $templateid = 0, $tpldir = '') {

$tplfile = DISCUZ_ROOT.'./'.$tpldir.'/'.$file.'.htm';//模板源文件,此处$tplfile变量的值可能是D:\discuz\templates\default\demo.htm
$objfile = DISCUZ_ROOT.'./forumdata/templates/'.
$templateid.'_'.$file.'.tpl.php';//模板缓存文件,此处$objfile变量的值可能是D:\discuz\forumdata\templates\1_demo.tpl.php

//如果模板源文件的修改时间迟于模板缓存文件的修改时间,
//就是模板源文件被修改而模板缓存没有更新的时候,
//则调用parse_template函数重新生成模板缓存文件。
if(@filemtime($tplfile) > @filemtime($objfile)) {
require_once DISCUZ_ROOT.'./include/template.func.php';
parse_template($file, $templateid, $tpldir);
}

//返回缓存文件名称
//$objfile变量内容可能为D:\discuz\forumdata\templates\1_demo.tpl.php
return $objfile;
}

而php页面的模板执行语句

include template('demo');

实际上在本例中就是相当于

include 'D:\discuz\forumdata\templates\1_demo.tpl.php';

这个流程就是一个demo.php文件中当数据处理完成以后include template(’demo’),去显示页面。

五、总结
我也曾经看到过有列举出很多种的PHP模板引擎,但是我觉着phplib、smarty、Discuz!模板机制就足以说明问题了。

1.我们需要模板来做什么?
分离程序与界面,为程序开发以及后期维护提供方便。

2.我们还在关心什么?
PHP模板引擎的效率,易用性,可维护性。

3.最后的要求什么?
简单就是美!

我的文章好像没有写完,其实已经写完了,我要说明的就是从PHP的模板引擎看Discuz!模板机制。分析已经完成,或许以后我会再写篇实际数据的测试供给大家参考!


从PHP的模板引擎看Discuz!模板机制
  • 上一篇文章:

  • 下一篇文章: 没有了
  •  热门文章
    推荐文章 如何去分析评估网站
    普通文章 电子邮件改头换面 四公司畅谈未
    普通文章 PC病毒史上最声名狼藉的八大病
    普通文章 Rails系统中的AJAX开发技术简析
    普通文章 基于ASP.NET AJAX框架实现表单
    普通文章 开发ASP.NET AJAX客户端定制行
    普通文章 用JFreeChart对JSP报表进行增强
    普通文章 SQL Server 2005上的CLR和ADO.
    普通文章 SQL Server 2005的XML支持机制
    普通文章 Firefox中标签式浏览技巧大全
     
     推荐文章
    推荐文章 如何去分析评估网站
    推荐文章 把Google地图嵌入网页 就是这么
    推荐文章 迅雷搜索候选资源出错的解决
    推荐文章 轻松去除迅雷里的各种广告和资
    推荐文章 突破限制 免费领养到QQ空间五级
    推荐文章 Rational统一过程RUP贴近中小软
    推荐文章 构建自己的轻量级XML DOM分析程
    推荐文章 WPS Office 2007技巧:妙用配置
    推荐文章 Excel 2007:求余数函数实用进阶
    推荐文章 浅谈ASP.NET的Postback
     
     相关文章
    PS实例教程:制作卡通的蓝天
    PS实例教程:制作迁细的光束
    PS实例教程:制作人体艺术封
    PS实例教程:制作随风旋转的
    PS实例教程:制作逼真的彩色
    PS实例教程:制作金属超眩星
    PS实例教程:荷花变成金色莲
    PS实例教程:制作可爱的五福
    淘宝新商城4月中旬上线
    马化腾:“全民公敌”式企业
    设为首页 | 加入收藏 | 广告合作 | 联系站长 | 版权申明 |
    动力中国为网友提供免费学习资料,可用资源,如果您认为我们的相关内容侵害到了您的权利请联系管理员
    Copyright © 2006-2008 domcn.org All Rights Reserved.