Versions Compared

Key

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

模板脚本绘制输出,通常这种输出是HTML。脚本用如FreeMarker或JSP这样的模板语言编写。脚本指导绘制者将内容放到页面的什么位置,并为类似标题和图片的内容提供占位符。模板脚本绘制通常为HTML形式的输出。脚本通过FreeMarker或JSP这样的模板语言来编写,它可以指导绘制程序将内容放到页面的什么位置,包含了为类似标题和图片的内容提供的占位符。

Table of Contents

脚本语言和绘制器

Magnolia CMS为FreeMarker和JSP提供可立即使用的绘制器。您可以选择偏好的语言,甚至可以在相同的网站上混合使用,在一些模板里使用FreeMarker而另一些里用JSP。 CMS为FreeMarker和JSP提供可立即使用的绘制程序。您可以选择喜欢的语言,甚至可以在相同的网站上混合使用,在一些模板里使用FreeMarker而另一些里用JSP。 

FreeMarker

在Magnolia里,我们更倾向于使用FreeMarker,因其灵活性,较清晰的语法,更好的错误报告机制,也因为它不依赖于文件系统。模板不需要导出到文件系统,这意味着您可以将它们存储在内容库中,并像其他资源一样获得,随意添加版本控制,以及添加定制的属性和元数据。在Magnolia里,我们更倾向于使用FreeMarker,因其比较灵活,语法较清晰,以及更好的错误报告机制,并且它不依赖于文件系统。模板不需要导出到文件系统,这意味着您可以将它们存储在内容库中,像其他资源一样获得,随意添加版本控制,以及添加定制的属性和元数据。

示例:绘制页面标题,如果没有标题则绘制名字。示例:绘制页面标题,如果没有标题则绘制页面名称。

Code Block
<h3>${content.title!content.@name}</h3>

这是FreeMarker提供的一些好处:FreeMarker提供的好处有:

  • 它是一种通用的模板语言,不束缚于Java环境。
  • 提供基本的指令,如[if][else]和[list]
  • 有一大套有大量的内建函数
  • 可以调用任何Java对象和返回对象的公共方法。
  • 不需要在请求/回复环境中绘制。
  • 提供直接获取节点对象(beans)的方法。可直接获取节点对象(beans)。
  • 可直接迭代任何扩展一个Java列表的内容集合。
  • 严格的由于其严格的null值处理导致稳定的模板。,模板比较稳定。
  • 需要的话允许使用JSP标签库。

JSP

JSP代表JavaServer Pages,是Java Servlet技术的一个延伸,用于综合Java服务器端的程序和HTML。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>

其他语言

您也可以使用另一模板语言。例如,有一些网站使用您也可以使用其他的模板语言。例如,有一些网站使用Apache Velocity。如果有您使用的语言可用的绘制器,很有可能可以将它合入Magnolia CMS。这就能够让您使用您熟悉的模板语言了。。如果您使用的语言有可用的绘制程序,很大可能您可以将它合入Magnolia CMS,这就能够让您使用您熟悉的模板语言了。

绘制器配置

FreemarkerRendererJspRenderer配置应用的/modules/rendering/renderers/freemarker/jsp里配置。

...

Advanced Tables - Table Plus
heading0
multiplefalse
enableHeadingAttributesfalse
enableSortingfalse
classm5-configuration-tree
enableHighlightingfalse
节点名

modules

 

standard-templating-kit

 

renderers

 

stk

 

contextAttributes

 

Paragraph

class

info.magnolia.module.templatingkit.renderers.STKRenderer

页面区域组件定义里的renderType属性定义使用的模板绘制器。对STK模板来说,类型是属性可定义使用何种模板绘制程序。对STK模板来说,类型是stk

加载脚本

系统可以从三个地方加载FreeMarker脚本,以下列顺序:系统可以从三个地方加载FreeMarker脚本,加载顺序如下:

  1. 网络应用程序的文件系统。您可以将脚本文件放在Web应用程序的文件系统。您可以将脚本文件放在/<CATALINA_HOME>/webapps/<contextPath>/templates文件夹。
  2. templates 工作区。模板需被使能才能被考虑进去。工作区。模板需先被使能才可以使用。
  3. 网络应用程序的类路径(classpath)。这是STK模板默认存放的地方。最佳实践是在模块JAR里打包脚本。模块JAR在类路径里好让系统找得到它。Web应用程序的类路径(classpath),这也是默认存放STK模板的地方。一个最佳实践是,在模块JAR里打包脚本(为方便系统找到,模块JAR在类路径里)。

模板加载器

FreeMarker模板加载器在配置应用的/server/rendering/freemarker/jcr/webapp里配置:

需要的话您也可以写下您自己定制的模板加载器。需要的话您也可以编写您自己定制的模板加载器。

Advanced Tables - Table Plus
heading0
multiplefalse
enableHeadingAttributesfalse
enableSortingfalse
classm5-configuration-tree
enableHighlightingfalse
节点名

server

 

filters

 

IPConfig

 

i18n

 

security

 

rendering

 

freemarker

 

templateLoaders

 

jcr

 

Paragraph

class

info.magnolia.module.inplacetemplating.JcrRepoTemplateLoader

Paragraph

extension

.ftl

Paragraph

workspace

templates

webapp

 

Paragraph

class

 info.magnolia.freemarker.loaders.LazyWebappTemplateLoader
Tip

JSP脚本只能存在于文件系统中,因为它们在被绘制前需要服务器预编译。JSP脚本在模块安装或更新时被解压到文件系统。JSP脚本由于在被绘制前需要服务器预编译,所以只能存在于文件系统中。JSP脚本在模块安装或更新时被解压到文件系统。

编辑脚本

Panel
bgColor#ffffff
titleBGColor#ffffff
title最佳实践
Multiexcerpt
MultiExcerptNamestoring scripts

最佳实践是将脚本存储在您的项目模块里,这样脚本可以被存储在一个版本控制系统,并且自动成为一个可控的软件开发周期的一部分。您可以在文件系统里用您喜爱的支持语法高亮及其他特性的编辑器来编辑。最好的方法是将脚本存储在您的项目模块里,这样脚本可以存储在一个版本控制系统,并且自动成为一个可控的软件开发周期的一部分。您可以在文件系统里用您喜爱的编辑器来编辑,支持语法高亮及其他特性等。

开发时,在内容库里编辑脚本有时候很有用。这种方法只对FreeMarker脚本有效。如果您将脚本导入当您在开发时,在内容库里编辑脚本有时很有用,但这种方法只对FreeMarker脚本有效。如果您将脚本导入到templates工作区,它们就会在STK > 模板里可见可用。所有的STK脚本都遵循这个模式。您可以从以上的加载顺序看出,在里可供使用。所有的STK脚本都遵循这个模式。您可以从以上的加载顺序看出,templates工作区里的脚本会覆写从类路径里加载的脚本。一旦被添加或修改,则需要选中工作区里的脚本会覆写从类路径里加载的脚本。所以脚本一旦被添加或修改,就需要选中使能模板复选框来强迫Magnolia CMS从内容库中加载模板。

 

Warning

在内容库里编辑模板脚本对评估,制造原型,或较小的项目比较理想。然后,长期来说这不利于维护。不要在生产环境中这样做。我们强烈建议您在一个版本控制系统中存储脚本,并将它们打包进一个项目模块。在内容库里编辑模板脚本对评估、制造原型或较小的项目比较理想。然后,长期来说这不利于维护。不要在生产环境中这样做。我们强烈建议您在一个版本控制系统中存储脚本,并将它们打包进一个项目模块。

 

参考更多信息请参考模板样例 > 编辑模板脚本里更多信息。

STK脚本

STK模板脚本在网络应用程序的类路径中。其副本在STK模板脚本在Web应用程序的类路径中,脚本副本在STK > 模板里就可以编辑。STK脚本是用FreeMarker写的。

...

  • components包含按照组件类型分类的组件模板。
  • pages包含的子文件夹里有main页面脚本,区域脚本在子文件夹里。页面脚本和区域脚本。

此结构遵循模板原型结构。在模板原型里引用的区域模板都被存在。模板原型里引用的区域模板都存在/global文件夹里。文件夹。

main脚本

main是主页面脚本(Git)。它是理解这个系统的一个好起点。它在编写实例上使用),是理解这个系统的一个好起点。它在编写实例上使用@cms.init指令初始化页面编辑器,也包含了设置指令初始化页面编辑器,同时也包含了设置bodyClassbodyID的逻辑。

main脚本使用@cms.area指令来调用区域绘制它们自身。它使用绘制,并使用#include指令绘制导航main脚本用三个DIV元件包装区域,建立了一个可调的页面网格

区域脚本

参考STK区域里关于STK区域脚本的描述。

指令

关键的模板特性以关键的模板工具功能在Magnolia CMS标签库里,以指令(directives形式在Magnolia CMS标签库里可用。指令输入很快,但会绘制复杂的输出。形式供使用。指令输入起来很快,却可以绘制复杂的输出。

标准FreeMarker指令

这里有一些最有用的FreeMarker指令及其样例代码:

...