CMS模板引擎系统的开发小结和未来发展的简单构思

2023-11-02 03:11

本文主要是介绍CMS模板引擎系统的开发小结和未来发展的简单构思,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CMS这行虽不算长,也有5年了,写些废话也算是个备忘,这些小小的开发心得愿与诸位共享,有砖的可以拍砖,没砖的扔块石头过来我也不介意。


一 模板标签系统的本质

 首先我想要说明的一点是,模板标签系统不仅是CMS的专利,在任何有前台显示需求的系统中,都可以看到类似的设计,比如论坛、OA、财务类软件等等。
 在以上这些不同的系统中,模板和标签都被赋予了不同的名称,比如财务类软件里,自定义凭证输出页就具有可视化的界面编辑系统,用户可以自主定义各种表格形式,并通过添加查询标签来实现数据的循环输出,这实际上就是一种模板标签系统。
 可以总结一下:通常意义上的模板标签系统,实质上就是一种对数据进行分类,归纳,并定义输出样式的过程。按照这个定义,我们可以找到很多类似模板标签系统的软件,比如EXCEL表格,行列的的显示样式就是模板,单元格的内容就是标签。


二 模板标签系统的分类

 通常意义下,模板承载着定义页面架构的功能,而标签则负责显示数据。这也就是大家常说的数据与样式分离。当然,不同的系统分离度并不一样,根据分离度就我就可以简单的对模板标签系统进行分类了。

  1 原始数据类,此类系统基本没有模板或标签的概念,所有的模板样式及数据查询均在程序中定义完成,最后通过字符拼接进行输出。优点是速度快,功能强(实际上是功能最强的,因为它的模板就是编程语言自己),缺点是改动困难,任何一个小小的修改都需要进行程序上的变动,此类软件完全没有通用性,只适合进行单独项目的快速开发。

  2 混合查询类,此类系统开始出现模板和标签的概念,但模板只有简单的框架定义功能,标签则混合在程序中定义完成,这类系统的优点是开发快速,有一定的通用性,但是修改标签非常麻烦,且为了满足不同行业用户的各种个性化要求,需要开发者预制很多的标签在系统中,才能满足需求,动易1.X-6.X系列软件均采取的是此种架构。

  3 模板至上类,此类系统以PHP平台下居多,模板的功能强大,几乎所有的查询都可以在模板中直接定义而来,同时在模板中还提供逻辑类标签。循环,判断,跳转等逻辑语句均在模板中由专用标签直接构造。此类系统优点是功能强大,有很好的通用性,用户进行个性化定制很容易。缺点是样式与数据分离依旧不够完美,由于在模板中直接进行数据查询和逻辑判断,所以无法有效的分离数据与样式,造成标签复用困难。此类系统的典型代表就是DEDE CMS中所使用的解析引擎。

  4 绝对分离类,模板中定义样式,标签中查询数据,粗看之下似乎与类型1无甚分别,但是此类引擎实现了彻底的逻辑与呈现的分离。所有模板样式的定义及数据查询均不接触程序代码本身,用户在后台即可远程自行定义完成。而且由于模板和标签的高分离度,实现了标签的复用,节约了大量的重复开发时间。动易SF即为此类系统的典型代表。


三 动易模板标签系统的历程

 动力1.X - 3.X时代,系统使用的是上面所说的第二类模板形式。模板是独立的系统,但标签混合在编程语言内,系统预制了所有需要的标签,调用方便,但是修改标签就必须进行程序代码的改变。

 powereasy 5.x版本中,小弟开始推行一系列的技术实验,也就是后来的自定义动态标签系统。是针对动易模板标签系统的第一次变革,虽然不太完美,但有效的解决了SW系列一直缺乏足够自由的自定义样式效果的弱点。说到这里不得不提的是科讯这个系统,几年它来通过对动态自定义标签的抄袭和扩展,目前在功能上已经超越了SW系列,但是骨子里还是动易的这一套,并没有什么其他突破。

 到了SiteFactory开始立项后,动易整体转入.NET平台进行开发,而这个平台强大的多数据处理能力造就了SF现在所采用的XML+XSLT形式的模板标签引擎,通过有效结合正则捕获与XML格式转换,SF的模板引擎在强大和容错这两方面都有一定的突破,既保留了XSLT的灵活性,又绕开了XSLT繁琐严格的错误机制,使得一般错误不会导致整个模板引擎崩溃。同时在模板中还保留了一部分逻辑标签。使得最终用户可以根据实际情况自由选择把样式定义在标签中,或者是定义在模板里。另外,这个称为Xpower的模板标签系统还具备非常强悍的可扩展性,用户可以任意扩展标签方法,只要C#做得到,Xpower就做得到,完全没有任何的限制。


四 未来的发展方向

 第一阶段,标签标准化,数据标准化,在SF中,通过运用XML,XSLT技术已经基本实现。

 第二阶段,标签实现跨平台,多引擎发展,标签的表面样式不变,内部可以用XSLT,也可以用PHP下的smarty之类的模板引擎进行解析。

 第三阶段,鼓励并联合其他平台下的CMS系统通过标准方式使用SF标签,比如动易与帝国CMS的混合应用,通过简单加挂由动易提供的函数库,在帝国CMS的系统模板里引入SF标签后,也可以解析出需要的结果。

 第四阶段,内容至上的阶段,标签的数据来源和组织方式的进一步扩展,不仅仅是站内的,而是全互联网的。技术开发此时应该退居幕后了,如何让标签成为一个万能的网络窗口才是最重要的,可以通过建立标签供应站的方式,建设一个类似GOOGLE API的站点,里面提供各类普通站长难以自行设计,自行维护的数据标签,比如天气预报标签,广告投放标签等,以标签云的方式向全网络提供各种标签,并鼓励个人和开发团体建立这种站点,联合全互联网的力量进行开发,而标签的提供者可以通过嵌入广告或者嵌入其他有偿数据的方式进行盈利,尽所有可能和各方力量来统一CMS类系统所使用的标签格式(这里指的是标签的XML定义格式),并建立业界标准。有了标准就有了力量,统一格式对CMS这个行业来说不是问题而是机会,只有全行业联合起来,才会引来更多方面的关注和商机。

 

时间有限,这次就简单的谈到这里,下次有时间我会做个模型演示一下跨平台的标签解析,很有意思的功能哟。

这篇关于CMS模板引擎系统的开发小结和未来发展的简单构思的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/327697

相关文章

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

flask库中sessions.py的使用小结

《flask库中sessions.py的使用小结》在Flask中Session是一种用于在不同请求之间存储用户数据的机制,Session默认是基于客户端Cookie的,但数据会经过加密签名,防止篡改,... 目录1. Flask Session 的基本使用(1) 启用 Session(2) 存储和读取 Se

Python获取浏览器Cookies的四种方式小结

《Python获取浏览器Cookies的四种方式小结》在进行Web应用程序测试和开发时,获取浏览器Cookies是一项重要任务,本文我们介绍四种用Python获取浏览器Cookies的方式,具有一定的... 目录什么是 Cookie?1.使用Selenium库获取浏览器Cookies2.使用浏览器开发者工具

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方