Page History
模板脚本绘制输出。通常这种输出是HTML。脚本用如FreeMarker或JSP这样的模板语言编写。脚本指导绘制者将内容放到页面的什么位置,并为类似标题和图片的内容提供占位符。模板脚本绘制输出,通常这种输出是HTML。脚本用如FreeMarker或JSP这样的模板语言编写。脚本指导绘制者将内容放到页面的什么位置,并为类似标题和图片的内容提供占位符。
Table of Contents |
---|
脚本语言和绘制器
...
在Magnolia里,我们更倾向于使用FreeMarker,因其灵活性,较清晰的语法,更好的错误报告机制,也因为它不依赖于文件系统。模板不需要导出到文件系统,这意味着您可以将它们存储在内容库中,并像其他资源一样获得,随意添加版本控制,以及添加定制的属性和元数据。
样例:绘制页面标题,如果没有标题则绘制名字。示例:绘制页面标题,如果没有标题则绘制名字。
Code Block |
---|
<h3>${content.title!content.@name}</h3> |
...
- 它是一种通用的模板语言,不束缚于Java环境。
- 提供基本的指令,如
[if]
,[else]和
[list]
。 - 有一大套built-ins内建函数。
- 可以调用任何Java对象和返回对象的公共方法。
- 不需要在请求/回复环境中绘制。
- 提供直接获取节点对象(beans)的方法。
- 可直接迭代任何扩展一个Java列表的内容集合。
- 严格的null值处理导致稳定的模板。
- 需要的话允许使用JSP标签库。
...
JSP代表JavaServer Pages,是Java Servlet技术的一个延伸,用于综合Java服务器端的程序和HTML。
样例:绘制页面标题,如果没有标题则绘制名字。示例:绘制页面标题,如果没有标题则绘制名字。
Code Block |
---|
<h3> <c:choose> <c:when test="${not empty content.title}">${content.title}</c:when> <c:otherwise>${content['@name']}</c:otherwise> </c:choose> </h3> |
...
定制Magnolia指令
Magnolia CMS提供一下定制指令:
对FreeMarker来说,这些指令都是由Directives类来完成的。此类可在Configuration应用的modules/rendering/renderers/freemarker/contextAttributes/cms/componentClass
里配置。
...
cms:area指令
(AreaDirective)绘制一个area区域以及里面的任何组件。编辑者可在区域内添加组件。可用的组件在区域定义里配置。
...
Code Block |
---|
[#list components as component ] [@cms.component content=component /] [/#list] |
常用指令属性
下列属性可用任何指令传递,它们定义指令创建的元件应该工作在什么内容上。The following attributes can be passed with any directive. They define which content the element created by the directive should work on.下列属性(attributes)可用任何指令传递,它们定义指令创建的元件应该工作在什么内容上。
属性(Attribute) | 描述 | 缺省值 |
---|---|---|
content | 一个节点或是内容地图。 | |
workspace | 指定路径时用到的工作区。 | 与当前内容相同 |
path | 工作区中的路径。 |
...
Code Block |
---|
<div id="wrapper-3"> [@cms.area name="platform"/] [@cms.area name="main" content=content/] [@cms.area name="extras"/] </div> |
在mainArea
区域脚本里,我们再次传递相同的信息给intro区域:“你应该在当前内容节点上执行,它(仍然)是一个页面。”区域脚本里,我们再次传递相同的信息给intro区域:“你应该在当前内容节点上执行,它(仍然)是一个页面。”
Code Block |
---|
<div id="main" role="main"> [@cms.area name="breadcrumb" content=content/] [@cms.area name="intro" content=content/] [@cms.area name="opener"/] [@cms.area name="content"/] </div><!-- end main --> |
现在由intro区域编辑页面内容。尽管intro区域在页面上位于main区域的DIV元件里,标题和摘要实际上属于页面,它们是页面的属性,而不是区域的。所以将这些属性存放在内容结构里的页面节点下是有道理的。
workspace属性
workspace
属性告知指令内容在属性(attribute)告知指令内容在magnolia
JCR库的哪个工作区。这几乎一直是website
工作区,如果当前内容在website
工作区里,则自动默认指向website。
...
DamTemplatingFunctions
提供到Assets
的直接权限以及定义有用的方法。这些方法表现为damfn
。参考DAM templatingDAM模板以获得更多信息。例如:
Code Block |
---|
[#assign asset = damfn.getAssetForId(content.link)][#assign assetMap = damfn.getAssetMapForAssetId(content.link)] |
...
Code Block |
---|
[#assign text = stkfn.abbreviateString(text, 80)] |
每个绘制器的模板功能类在The templating functions classes are configured for each renderer in the 每个绘制器的模板功能类在Configuration应用的/<module>/rendering/renderers/<renderer>/contextAttributes/<tag library>
下配置。注意<tag library>
内容节点和name
数据节点的值与脚本里呈现给方法的句法相匹配。
...