模板用于创建页面并定义可在所选范围内使用的组件。 模板是节点的层次结构,其结构与要创建的页面相同,但没有任何实际内容。
每个模板都将为您提供一系列可供使用的组件。
可编 辑的模板也可用,为获得最大的灵活性和最新功能,推荐使用此类模板。
模板是cq:Template类型的节点,具有以下属性和子节点:
名称 |
类型 |
描述 |
. |
cq:Template | 当前模板。 模板的节点类型为cq:Template。 |
allowedChildren | String[] | 允许作为此模板子项的模板的路径。 |
allowedParents | String[] | 允许作为此模板父项的模板的路径。 |
allowedPaths | String[] | 允许基于此模板的页面路径。 |
jcr:created | 日期 | 模板的创建日期。 |
jcr:description | 字符串 | 模板的描述。 |
jcr:title | 字符串 | 模板的标题。 |
排名 | 长整型 | 模板的排名。 用于在用户界面中显示模板。 |
jcr:content | cq:PageContent | 包含模板内容的节点。 |
thumbnail.png | nt:file | 模板的缩略图。 |
icon.png | nt:file | 模板的图标。 |
模板是页面的基础。
要创建页面,必须将模板(node-tree /apps/<myapp>/template/<mytemplate>
)复制到站点树中的相应位置:如果使用网站选项卡创建页面,则会发生这种情况。
此复制操作还会为页面提供其初始内容(通常仅限顶级内容)和属性sling:resourceType,用于呈现页面的页面组件的路径(子节点jcr:content中的所有内容)。
需要考虑两个方面:
在cq:Template类型的节点下创建模板。
可以设置各种属性,特别是:
该节点包含一个jcr:content(cq:PageContent)节点,该节点用作生成页面内容节点的基础;这会使用sling:resourceType引用,该组件用于呈现新页面的实际内容。
此组件用于在创建新页面时定义内容的结构和设计。
模板用于创建cq:Page
类型的页面(如前面所述,页面是特殊类型的组件)。 每个AEM页面都有一个结构化节点jcr:content
。 此功能:
sling:resourceType
属性,用于引用包含用于呈现内容的sling脚本的组件AEM附带许多开箱即用的默认模板。 在某些情况下,您可能希望按原样使用模板。 在这种情况下,您需要确保模板可用于您的网站。
例如,AEM附带多个模板,包括内容页面和主页。
标题 | 组件 | 位置 | 用途 |
---|---|---|---|
主页 | homepage | geometrixx | Geometrixx 主页模板。 |
内容页 | contentpage | geometrixx | Geometrixx 内容页模板。 |
要查看存储库中所有模板的列表,请按如下步骤继续操作:
在 CRXDE Lite 中,打开工具菜单,然后单击查询。
在“查询”选项卡中
选择 XPath 作为类型。
在查询输入字段中,输入以下字符串:
//element(*, cq:Template)
单击执行。将在结果框中显示列表。
在大多数情况下,您会采用现有模板并开发一个新模板供您自己使用。 有关更多信息,请参阅开发页面模板。
要为您的网站启用现有模板,并且希望在从网站控制台中的网站下创建页面时,该模板显示在创建页面对话框中,请将模板节点的allowedPaths属性设置为:/content(/)*?
当使用设计模式在UI中定义样式时,该设计将保留在正为其定义样式的内容节点的确切路径中。
Adobe建议仅通过设计模式应用设计。
例如,在 CRX DE 中修改设计不是最佳实践,并且此类设计的应用程序可能与预期不同。
如果仅使用设计模式应用设计,则以下部分(设计路径分辨率、决策树和示例)不适用。
本节介绍自AEM 6.4.2.0起的设计路径解析行为。
在基于静态模板呈现内容时,AEM将尝试根据内容层次结构的遍历将最相关的设计和样式应用于内容。
AEM按以下顺序确定内容节点的最相关样式:
在最后两种情况下,如果存在多个适用的设计,则使用距离内容节点最近的设计。
这是设计路径分辨率逻辑的图形表示。
请考虑如下简单的内容结构,其中设计可以应用于任何节点:
/root/branch/leaf
下表描述了AEM如何选择设计。
查找设计 |
设计适用于 |
所选设计 |
注释 |
leaf
|
|
leaf |
始终进行最精确的匹配。 |
leaf |
|
branch |
回退到树中最接近的匹配项。 |
leaf |
root |
root |
如果所有其他操作都失败,则取剩余的操作。 |
branch |
branch |
branch |
|
branch |
|
branch |
|
branch |
|
branch |
|
branch |
|
root |
如果没有完全匹配,请取树中的下一个。 假设这将始终适用,但树的上端可能过于具体。 |
AEM页面模板只是用于创建新页面的模型。 它们可以根据需要包含少量或多量的初始内容,其角色是创建正确的初始节点结构,并将所需的属性(主要是sling:resourceType)设置为允许编辑和渲染。
不用说,新模板可以完全从头开始创建,但通常会复制并更新现有模板,以节省您的时间和精力。 例如,可以使用Geometrixx中的模板来帮助您入门。
要基于现有模板创建新模板,请执行以下操作:
将现有模板(最好使用尽可能接近您要实现的目标的定义)复制到新节点。
模板通常存储在/apps/<website-name>/templates/<template-name>中。
可用模板的列表取决于新页面的位置以及在每个模板中指定的放置限制。 请参阅模板可用性。
更改新模板节点的jcr:title以反映其新角色。 您还可以更新jcr:description(如果适用)。 请务必根据需要更改页面的模板可用性。
如果希望在从网站控制台的网站下创建页面时,模板显示在创建页面对话框中,请将模板节点的allowedPaths
属性设置为:/content(/.*)?
复制模板所基于的组件(该组件由模板中jcr:content节点的sling:resourceType属性指示)以创建新实例。
组件通常存储在/apps/<website-name>/components/<component-name>中。
更新新组件的jcr:title和jcr:description。
如果希望在模板选择列表中显示新的缩略图图片(大小为128 x 98像素),请替换thumbnail.png。
更新模板jcr:content节点的sling:resourceType以引用新组件。
对模板和/或其基础组件的功能或设计进行任何进一步的更改。
对**/apps/<网站>/templates/<template-name>节点所做的更改将影响模板实例(如选择列表中所示)。
对/apps/<网站>/components/<component-name>**节点所做的更改将会影响使用模板时创建的内容页面。
您现在可以使用新模板在网站中创建页面。
编辑器客户端库假定内容页面中存在cq.shared
命名空间,如果不存在,则会导致JavaScript错误Uncaught TypeError: Cannot read property 'shared' of undefined
。
所有示例内容页面都包含cq.shared
,因此基于这些页面的任何内容都会自动包含cq.shared
。 但是,如果您决定从头开始创建自己的内容页面而不基于示例内容,则必须确保包含cq.shared
命名空间。
有关更多信息,请参阅使用客户端库。
此示例说明了如何允许将模板用于某些内容路径。 创建新页面时页面作者可用的模板取决于Template Availability中定义的逻辑。
在CRXDE Lite中,导航到要用于页面的模板,例如新闻稿模板。
更改allowedPaths
属性和用于模板可用性的其他属性。 例如,allowedPaths
:/content/geometrixx-outdoors/[^/]+(/.*)?
表示允许在/content/geometrixx-outdoors
下的任何路径中使用此模板。