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

相关文章

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

MobaXterm远程登录工具功能与应用小结

《MobaXterm远程登录工具功能与应用小结》MobaXterm是一款功能强大的远程终端软件,主要支持SSH登录,拥有多种远程协议,实现跨平台访问,它包括多会话管理、本地命令行执行、图形化界面集成和... 目录1. 远程终端软件概述1.1 远程终端软件的定义与用途1.2 远程终端软件的关键特性2. 支持的

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创