Page History
...
Code Block |
---|
[#list model.getSomeList() as elem] <li>${elem.title!}</li> [/#list] |
assign
assign允许您定义变量。任何非空对象都能被传递给变量。assign允许您定义变量。任何非空对象都能传递给变量。
Code Block |
---|
[#assign title = content.title!content.@name] [#assign hasDate = content.date?has_content] [#assign dateShort = content.date?time?string.short] [#assign events = model.events] [#assign stringgy = "Some direct string data"] |
...
Code Block |
---|
[#include "/templating-kit/templates/content/myScript.ftl"] |
宏
宏指令使您复用FreeMarker代码片段。参考宏指令让您可以复用FreeMarker代码片段。参考STK > 模板 /templating-kit/components/macros
里STK使用的例子。里STK的使用例子。
Code Block |
---|
[#macro test foo bar="Bar" baaz=-1] Test text, and the params: ${foo}, ${bar}, ${baaz} [/#macro] [@test foo="a" bar="b" baaz=5*5-2/] [@test foo="a" bar="b"/] [@test foo="a" baaz=5*5-2/] [@test foo="a"/] |
定制Magnolia指令
Magnolia CMS提供一下定制指令:CMS提供以下定制指令:
cms:init
:嵌入编辑页面所必需的JavaScript和CSS。:嵌入了编辑页面需要的JavaScript和CSS。cms:area
绘制用来绘制区域。cms:componentcomponent用来
绘制组件。
对FreeMarker来说,这些指令都是由Directives类来完成的。此类可在类来完成的。这个类在配置应用的modules/rendering/renderers/freemarker/contextAttributes/cms/componentClass
里配置。
...
指令的语法随模板语言而略有不同。FreeMarker指令中,标准指令以“#”字符开头,而定制指令则以“@”符号开头。所有Magnolia cms
中,标准指令以“#”字符开头,而定制指令则以“@”符号开头。所有Magnolia cms
标签库中的指令都以“@”开头,紧接着是标签库的名字,如cms
,其次是一个点符号,宏的名字,以及任何参数。在JSP里限制的字符则不同。,其次是一个点符号、宏的名字以及参数。在JSP里限制的字符则不同。
语法:
Code Block |
---|
[@<tag library>.<macro> <parameter>=<value> /] |
...
cms:area
cms:area指令
(AreaDirective)绘制一个)绘制区域以及里面的任何组件。编辑者可在区域内添加组件。可用的组件在区域定义里配置。以及里面的组件。编辑者可在区域内添加组件。可用的组件在区域定义里配置。
示例:
Code Block |
---|
[@cms.area name="main"/] |
该指令通过区域名字引用区域。区域名为包含该指令通过区域名称来引用区域。区域名称为包含区域定义的内容节点,如main
,footer
或stage
。
页面上的结果是一个区域栏,一个开始标记和一个结束标记。区域定义里页面上的结果是一个区域栏、一个开始标记和一个结束标记。区域定义里title
属性值在此区域栏里绘制。当编辑者点击新建组件框的添加图标时,组件就添加到区域里了。属性值在此区域栏里绘制。编辑者点击新建组件框的添加图标时,组件就添加到区域里了。
如果区域定义包含一个templateScript
属性,那么由被引用的脚本绘制区域。如果没给定脚本,以下缺省脚本则会被使用:属性,那么由被引用的脚本绘制区域。如果脚本没有给出,则使用以下默认脚本:
区域类型为single
Code Block |
---|
[@cms.component content=component /] |
...
cms:component
指令(ComponentDirective)绘制组件。content
属性(attribute)定义组件编辑的内容。该标签符通常被用在属性(attribute)定义组件编辑的内容,通常用在list
指令里来依次通过地图里的组件。指令里,在同一个map的组件里循环。
要绘制的内容,或对于可编辑组件可能的编辑,都是通过content
属性(attribute)来传递。在编写实例上,指令绘制一个组件工具栏。组件定义里的属性传递要绘制的内容,或可能要编辑的内容(对于可编辑组件来说)。在编写实例上,指令绘制一个组件工具栏。组件定义里的title
属性值在工具栏中绘制。属性(property)值在工具栏中绘制。
属性(Attribute) | 描述 | 缺省值 |
---|---|---|
editable | 定义编辑图标是否应被显示,主要对继承的内容有用。 | cmsfn.isFromCurrentPage() |
template | 要用到的组件定义名。 | 节点里定义的模板。 |
...
下列属性(attributes)可用任何指令传递,它们定义指令创建的元件应该工作在什么内容上。
属性(Attribute)属性 | 描述 | 缺省值 |
---|---|---|
content | 一个节点或是内容地图。 | |
workspace | 指定路径时用到的工作区。 | 与当前内容相同 |
path | 工作区中的路径。 |
content属性
content
属性(attribute)告诉脚本它应该在哪个内容节点上操作。脚本通常在“当前”内容节点上执行。对于一个页面级脚本,当前节点为该页面,而对于一个区域级脚本,当前节点就是该区域,同样,对于一个组件级脚本,当前节点就是该组件。然后,也有一些您想要脚本在一个不同的内容节点上执行的情况,这就是属性告诉脚本它应该在哪个内容节点上操作。脚本通常在“当前”内容节点上操作。对于一个页面级脚本,当前节点为该页面;而对于一个区域级脚本,当前节点就是该区域。同样,对于一个组件级脚本,当前节点就是该组件。然后,也有一些情况,如您想要脚本在一个不同的内容节点上操作,这时content
属性变得方便实用的时候。属性就变得方便实用。
例如,intro区域没有它自己的内容,它也不包含任何组件,因为它是例如,intro区域没有它自己的内容,也不包含任何组件,因为它是noComponent
类型的。这个区域在页面内容上操作,编辑和绘制页面标题及摘要。我们通过使用内容属性来实现这些。类型的。我们将通过使用content
属性来实现让这个区域在页面内容上操作,编辑和绘制页面标题及摘要。
在main.ftl
脚本里,我们告诉main区域:“你应该在当前内容节点上执行,它是一个页面,因为我是一个页面级脚本。”脚本里,我们告诉main区域:“你应该在当前内容节点上操作,因为它是一个页面,而我是一个页面级脚本。”
Code Block |
---|
<div id="wrapper-3"> [@cms.area name="platform"/] [@cms.area name="main" content=content/] [@cms.area name="extras"/] </div> |
...
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元件里,标题和摘要实际上属于页面,它们是页面的属性,而不是区域的。所以将这些属性存放在内容结构里的页面节点下是有道理的。现在由intro区域编辑页面内容。尽管intro区域在页面上位于main区域的DIV元件里,标题和摘要实际上是属于页面的。它们是页面的而非区域的属性,所以应当将它们存放在内容结构里的页面节点下。
workspace属性
workspace
属性(attribute)告知指令内容在属性(attribute)告知指令,内容在magnolia
JCR库的哪个工作区。这几乎一直是 JCR库的哪个工作区。实际上,几乎总是website
工作区,如果当前内容在工作区;如果当前内容在website
工作区里,则自动默认指向website。
...