新用户注册入口 老用户登录入口

[转载]discuz php单页,从PHP的模板引擎看Discuz!模板机制

文章作者:转载 更新时间:2023-10-07 14:43:46 阅读数量:107
文章标签:模板引擎Discuz!SmartyphplibPHP模板机制模板处理过程
本文摘要:本文回顾了PHP模板引擎的发展历程,从phplib到smarty,再到Discuz!的模板机制。作者通过对比三种模板处理流程,揭示了它们在初始化、设置变量、解析及输出内容上的差异,并聚焦于Discuz!模板机制的简易性和易用性。文章详细分析了Discuz!模板处理函数的工作原理,强调其简化模板语言以适应美工需求,以及通过缓存文件提高效率的设计思路。最后总结指出,模板引擎的核心目标在于分离程序与界面,提升开发与维护便利性,而关注点应包括引擎的效率、易用性和可维护性,其中Discuz!模板机制以其“简单就是美”的设计理念脱颖而出。关键词:模板引擎、Discuz!、Smarty、phplib、模板处理过程、模板源文件语法、PHP模板机制、模板缓存、循环嵌套、简单易用。
转载文章

本篇文章为转载内容。原文链接:https://blog.csdn.net/weixin_42557656/article/details/115159292。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

前言

本文写于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中处理循环嵌套的时候,使用:

{it}

在smarty中处理循环嵌套的时候,引入了< {section name=loopName loop=$loopArray}>(当然还有foreach这样的)

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

其实真正的模板面对的可以说是不懂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!模板机制。分析已经完成,或许以后我会再写篇实际数据的测试供给大家参考!

Tags: none

版权声明:原创作品,欢迎转载,转载时请务必以超链接形式标明文章原始地址、作者信息和本声明。

本篇文章为转载内容。原文链接:https://blog.csdn.net/weixin_42557656/article/details/115159292。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

相关阅读
文章标题:[转载][洛谷P1082]同余方程

更新时间:2023-02-18
[转载][洛谷P1082]同余方程
文章标题:[转载]webpack优化之HappyPack实战

更新时间:2023-08-07
[转载]webpack优化之HappyPack实战
文章标题:[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法

更新时间:2023-09-10
[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法
文章标题:[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo

更新时间:2024-03-11
[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo
文章标题:[转载]程序员也分三六九等?等级差异,一个看不起一个!

更新时间:2024-05-10
[转载]程序员也分三六九等?等级差异,一个看不起一个!
文章标题:[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集

更新时间:2024-01-12
[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集
名词解释
作为当前文章的名词解释,仅对当前文章有效。
PHP模板引擎PHP模板引擎是一种用于分离PHP应用程序的业务逻辑和显示层的技术工具,它允许开发者将HTML代码与PHP代码解耦,通过特定的语法结构在模板文件中嵌入PHP变量和逻辑控制结构。在本文中,作者对比了phplib、Smarty以及Discuz!等不同PHP模板引擎的特点、处理过程及语法差异。
MVC(Model-View-Controller)MVC是一种广泛应用于Web开发中的设计模式,旨在提升代码的可维护性和复用性。在该模式中,“模型”负责处理数据和业务逻辑,“视图”负责渲染用户界面展示数据,“控制器”则协调模型和视图之间的交互。文中提及模板引擎在某种程度上实现了MVC架构中的视图部分,通过提供易于美工编辑的模板语言来分离程序逻辑与界面展示。
模板缓存模板缓存是指模板引擎在运行时将解析后的模板内容生成静态文件或内存存储,并在后续请求中直接读取缓存内容而非重新解析模板的过程。在本文讨论的Discuz!模板机制中,如果模板源文件被修改而缓存文件未更新,系统会自动调用函数重新生成模板缓存文件,从而提高页面加载速度和整体性能。
延伸阅读
作为当前文章的延伸阅读,仅对当前文章有效。
随着技术的发展,PHP模板引擎的选择与使用在现代Web开发中仍然占据着重要地位。近年来,除了文中提及的phplib、Smarty和Discuz!模板机制外,新兴的Twig模板引擎受到了广泛的关注。作为Symfony框架的一部分,Twig以其安全、高性能及灵活的语法结构赢得了开发者们的青睐,它强调了模板设计的逻辑性和可维护性,并通过沙箱模式保障了运行时的安全。
同时,在追求极致性能和简洁设计的趋势下,原生PHP模板渲染方案也逐渐回归大众视野。例如,Laravel框架中的Blade模板引擎,结合了PHP的强大功能与简洁明快的模板语言,为开发者提供了高效的开发体验。
此外,随着JIT(Just In Time)编译器的引入,PHP 8版本在执行效率上有了显著提升,这使得一些开发者重新思考是否有必要在所有项目中都采用独立模板引擎。对于小型项目或对响应速度有极高要求的应用场景,直接在PHP中编写和渲染模板可能成为更优选择。
值得一提的是,Serverless架构的兴起也影响了模板引擎的发展方向,以AWS Lambda为代表的无服务器计算平台促使开发者更加关注资源利用率和启动速度,从而催生出一系列针对轻量级环境优化的模板解决方案。
总之,模板引擎的选择不仅取决于项目的具体需求,还应考虑当下技术发展的趋势和实际应用环境的要求。在深入理解各类模板引擎特性的基础上,开发者可以更好地权衡易用性、效率和安全性,以便在实际项目中做出最佳决策。
知识学习
实践的时候请根据实际情况谨慎操作。
随机学习一条linux命令:
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i} }' | sort -rn | head -n 10 - 查看最常使用的十条命令。
随便看看
拉到页底了吧,随便看看还有哪些文章你可能感兴趣。
HessianRPC在高负载下服务降级与熔断器模式保障用户体验 05-01 jQuery和TweenMax简单实用的水平手风琴特效 01-20 jquery选择国家下拉列表框插件 01-21 Sqoop在Hadoop集群中的数据传输机制及数据库迁移、收集与备份恢复应用实践 12-23 简约渔具批发牧渔企业类网站前端模板下载 11-09 基于bootstrap功能齐全的jQuery进度条插件 10-20 简约大气男性护肤产品HTML5网站模板 09-22 宽屏大气机械设备制造公司网站模板 08-13 演讲会门票销售网站模板下载 07-30 本次刷新还10个文章未展示,点击 更多查看。
经典响应式投资理财企业前端模板 06-26 基于Redis的键值对存储实现用户阅读状态跟踪与管理 06-24 Netty框架中CannotFindServerSelection异常:服务器地址配置错误与通道类型匹配详解 06-18 简洁设计公司响应式网站模板下载 05-06 绿色苗木草坪种植绿化类企业前端CMS模板下载 04-30 怎么在cmd开启mysql服务 04-15 保洁公司家庭保洁服务网站模板 03-26 SpringCloud微服务中分布式锁的死锁问题与状态一致性维护:避免循环依赖、公平锁及超时重试机制在Redisson中的实践运用 03-19 HBase性能测试与RegionServer配置、架构及数据模型调优实践:关注响应时间、并发处理能力与BlockCache优化 03-14 jquery控制radio触发事件 02-15 简约HTML5软件营销业务公司网站模板 02-09
时光飞逝
"流光容易把人抛,红了樱桃,绿了芭蕉。"