高性能内容发布

1.模板引擎

  内容经过创作和编辑并且划分栏目结构之后,还需要在模板中通过标签引用栏目、内容和区块,然后再根据制作好的模板为站点生成首页,为相应栏目生成列表页,为相应内容记录生成详细页。ZCMS把结合模板和数据生成最终页面的程序逻辑称之为模板引擎。

  ZCMS的模板引擎在性能、严谨性、灵活性、可扩展性上都是业内首屈一指的:

  性能:ZCMS中模板执行时先由模板引擎检查是否有修改,有则编译成中间结果并缓存,无则直接从缓存中获取中间 结果。ZCMS模板引擎的编译速度非常快,用户修改模板后立即刷新预览页面,即可无延迟地看到模板重新编译后的执行效果。ZCMS中模板的每次执行时间在 毫秒级,经测试略快于JSP页面的单次执行。

  严谨性:ZCMS中的模板需要声明自己的模板类型,每个可以设置模板的地方也都声明了自己能够使用的模板类型, 从而防止类似于将详细页模板设置到首页的错误。ZCMS中的标签需要以扩展项的形式注册到模板引擎,如果标签未注册则模板引擎会直接原样输出,从而防止误 判。标签具有哪些属性以及各个属性允许的属性值的类型都是需要声明的,不允许使用未声明的属性和错误的属性值类型。ZCMS的模板引擎有完善的错误检查机 制,在模板编译和执行发生错误时,能够准确提示模板中的第几行发生了错误。

  灵活性:ZCMS支持种类齐全的标签,支持类似于JAVA和JavaScript的表达式以用于求值输出和条件输出。ZCMS中的表达式求值:

  "${Price}*0.9+1" />

  ZCMS中通过标签的复杂逻辑表达式支持条件输出:

  "${Page.Index}>0&&(${Page.Index}<${Page.Count}-1) ">

  下一页

  

  可扩展:ZCMS中的模板类型被设计成可扩展的,各插件可以注册自己的模板类型,并可以在模板类型的实现类中根 据当前模板执行的数据ID注入此类模板中可以使用的全局变量,以便在不同类型的模板中使用不同的占位符来引用数据。ZCMS中的标签也是可扩展的,二次开 发人员可以通过注册扩展项到标签扩展服务的方式来定义新的标签。开发人员可以将标签声明成单次输出,也可以将标签声明成循环迭代输出,可以为标签指定有哪 些属性以及各属性的值的类型。开发人员可以根据需要往模板上下文中注入数据,以便于模板制作时可以在标签体内通过${Name}的形式引用。

2.模板标签

  ZCMS将模板中类似于的、由ZCMS负责解释执行的XML标记称之为标签。标签由各个插件通过注册扩展项的形式提供,ZCMS只识别己注册的XML标记,未注册的XML标记(例如以及等)则直接按原样输出。

  ZCMS支持标签互相嵌套,标签可以无限层级嵌套,支持多级循环。在多层嵌套的标签中可以使用${Parent.Name}引用父级标签的数 据,也可以通过多个“Parent.”占位符前缀来上溯引用多级父标签的数据,例如${Parent. Parent.Name}可以引用上上级标签中的占位符数据。

  ZCMS支持在后台管理界面查看某个标签的使用情况,能够详细列出此标签在哪个模板中被使用以及使用此标签的具体代码。

  ZCMS还提供了Dreamweaver模板制作插件,通过Dreamweaver插件支持标签的可视化操作。

图:在ZCMS中查看标签使用情况

图:在ZCMS中查看标签使用情况

3.内容发布

  在ZCMS中,站点、栏目和内容开始时对浏览者是不可见的,网站维护人员和编辑人员在内容编辑和组织完成后,将站点、栏目、内容以及其他页面开放给浏览者访问的动作称之为发布。发布一般需要将数据和模板结合,生成静态页面,浏览者看到通常是生成后的静态页面。

  个别情况下(例如分权限浏览)发布时不需要生成静态文件,只是简单改变内容的状态,在浏览者请求相应的URL时再动态结合模板输出数据。

4.文件分发

  ZCMS将页面发布后,如果ZCMS所在服务器直接充当WEB服务器,则发布完成后浏览者即可直接看到最新的网站内容了。但在大型网站中,通常会使用 专门的中间件服务器用来部署ZCMS,而会有多个WEB服务器用来向浏览者提供网站页面内容。将发布后的页面从ZCMS所在服务器传输到一个或多个WEB 服务器的过程称之为分发。

ZCMS支持使用网站群分发,可以将本站点某个栏目中的待发布或已发布状态的内容快速批量的复制到多个站点的多个栏目中。

  

图:网站群分发

图:ZCMS网站群分发