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

相关文章

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

Flutter打包APK的几种方式小结

《Flutter打包APK的几种方式小结》Flutter打包不同于RN,Flutter可以在AndroidStudio里编写Flutter代码并最终打包为APK,本篇主要阐述涉及到的几种打包方式,通... 目录前言1. android原生打包APK方式2. Flutter通过原生工程打包方式3. Futte