EZ Publish/EZ Publish节点模板
EZ Publish | EZ Publish安装与卸载 | EZ Publish的使用 | EZ Publish常见问题 | EZ Publish其他 |
本条目的目的是讲授关于模板系统的一切基本知识。它描述了模板语言以及系统如何处理模板文件。之前不熟悉eZ Publish 的用户应该可以得到足够的信息来帮助理解如下问题:
- 模板是什么又不是什么
- 模板类型(pagelayout,节点和系统模板)
- 模板结构
- 模板语言
- 主模板(pagelayout)
- pagelayout 中可以使用的模板变量
- 如何完成基本的模板任务
- 如何从CMS 中提取信息
- 模板重设系统
模板基础[ ]
eZ Publish 把模板作为站点界面的基础单元。基本上模板是一个定制过的HTML 文件,这个文件描述了特殊类型的内容如何被显示。模板文件总是以".tpl"作为后缀名。 内建/默认模板中的HTML 代码符合XHTML1.0 Transitional 规范。除标准HTML 语法外,模板还由eZ Publish 特有的代码构成。eZ Publish 特有的代码允许模板从系统中提取信息并解决通用的编程问题如:
条件分支,循环等。所有eZ Publish 特有的代码必须被放置在一对大括号"{“和"}"中。下例演示了某个模板的一部分,用于显示当前系统时间。
... <h1>Time machine</h1> <p> The current time is: {currentdate()|l10n( time )} </p> ...
上列演示了标注HTML 如何与eZ Publish 特有的代码混合在一起。演示了"currentdata"和"l10n"模板操作符的用法。因为"currentdata"返回一个UNIX 时间戳,它必须经过"l10n"本地化操作符格式化(否则输出的数据无法被理解)。这是通过将"currentdata"的输出用管道操作符连接到"l10n",后者会根据当前区域设置来输出结果。"Time"参数告诉操作符只输出时间(它可以是"date","shortdate","datetime"等等)。
模板生成
模板系统基于组件。换言之,一个真实的HTML 页面通常由多个模板构成。至少,eZ Publish 总是生成主模板,称为pagelayout。pagelayout 由HTML,HEAD 和BODY 标签构成;它决定了站点的全局版式。除了其他外特性外,它描述了系统所有HTML 页面的全局视觉结构(主版式,logo,主菜单,页脚,等等)。 每个客户端的请求告诉eZ Publish 运行特性的模块并执行模块的某个视图。当执行结束后,请求的模块/视图组合会生成一个结果。这个结果可以在pagelayout 中通过$module_result 数组访问。下图演示了一个3 步的流程来解释eZ Publish 如何回应一个HTTP 请求。
每个视图会用一个模板生成一段HTML 代码。被视图使用的模板通常被称为“视图模板”。每当一个视图执行结束后,它会调用一个内部模板请求。被请求的模板会被解释,处理然后被转换为HTML。处理之后,系统会把结果的HTML 放入模块的结果数组中。模块/视图的结果可以用".content"来访问: {$module_result.content}。通过显示这个变量的内容,可以在pagelayout 中包含视图生成的HTML 内容。下图演示了模块/视图结果(由不同的模块/视图生成-取决于不同的请求)如何被包含到pagelayout 中。
视图模板 被视图使用的模板可以是一个节点模板或是系统模板。节点模板只有在一个节点被显示时,才会被用到,例如:当一个包含"conent/view"的系统URL 或一个节点的虚拟URL 被请求。系统模板通常用来提供调用eZ Publish 某个特定特性的HTML 接口。例如:被"content"模块的"search"视图使用的模板提供了调用系统内建的检索引擎的接口。
上述模板类型间的区别在于模板中可以使用的变量和可用的重设规则组合。在节点模板中有一个特殊变量($node),这个变量包含了当前被显示的节点的信息。取决于被执行的视图,系统模板中通常会有一些可用变量。模板重设规则允许在特定条件下使用自定义模板。节点模板的重设规则比系统模板的规则要灵活很多。例如:可以设定复杂的重设规则组合来通过节点的类型,节点树的深度,节点对象所在的分区等条件来决定所用的节点模板。请参阅“EZ Publish 模板重设系统”了解更多关于模板重设系统的信息。
节点模板[ ]
任何时候,当eZ Publish 被要求输出某个节点的信息时(通过系统URL 或虚拟URL),它都会执行"content"模块的"view"视图。如果使用系统URL,视图模式和目标节点必须在URL 中指定。如果使用虚拟URL,eZ Publish 会通过查阅内部的URL 表来得知应该使用什么视图模式以及显示哪个节点。当使用虚拟URL 时,系统总是会使用"full"视图模式。服务于不同视图模式的模板必须被放置在某个界面的"templates/node/view/"目录中。如果在主界面中没找到所需模板,系统会在附加和标准界面中搜索。"standard"界面中的"templates/node/view"目录包含了不同视图模式的模板。一个最基本的自定义界面通常会包含pagelayout 和一个"full"视图模板。下图演示了一个称为"example"的自定义界面中上述文件的位置。
当节点被请求(且没有针对节点模板的模板重设规则)时,eZ Publish 将会生成一个由以下模板构成的页面。
自定义节点模板 典型的eZ Publish 站点总是会用到自定义节点模板。主要的原因在于,用户总会希望用不同的方式显示不同的内容。例如:信息页会与新闻页有所不同;欢迎页面需要有特殊的格式等等。不同于自定义系统模板(基本上是复制一份系统模板到自定义界面,然后做适当调整),自定义节点模板被创建为重设模板。重设模板被模板重设系统触发。系统提供了灵活的机制来根据不同条件使用不同的模板。例如:它可以被配置为在显示一个文章类节点时,使用"article.tpl",而在显示某个特殊的文章节点时,使用"spacical.tpl“。请参阅“EZ Publish 模板重设系统”了解更多关于这种机制如何运作以及如何出发重设系统的信息。
$node 变量
任何时候当系统使用节点变量时(无论使用何种视图模式,目标节点是什么还是模板是重设模板与否),$node 变量在模板中总是可用。这个变量是系统自动设置的且它包含一个"ezcontentobjecttreenode"对象(此处的对象指的是PHP 语言的对象,而不是内容对象)来代表当前显示的节点。从这个变量中可以提取并显示各种关于节点以及节点封装的内容对象的信息。