Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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"/]

该指令通过区域名字引用区域。区域名为包含该指令通过区域名称来引用区域。区域名称为包含区域定义的内容节点,如mainfooterstage

页面上的结果是一个区域栏,一个开始标记和一个结束标记。区域定义里页面上的结果是一个区域栏、一个开始标记和一个结束标记。区域定义里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。

...