页面模板 — 静态 page-templates-static

模板用于创建页面,并定义可在所选范围内使用的组件。 模板是一种节点层次结构,与要创建页面的结构相同,但没有任何实际内容。

每个模板都会为您提供一系列可供使用的组件。

  • 模板由个组件组成;
  • 组件使用并允许访问Widget,这些构件用于呈现内容。
NOTE
还可使用可编辑的模板,为获得最大的灵活性和最新功能,建议使用此类模板。

模板的属性和子节点 properties-and-child-nodes-of-a-template

模板是cq:Template类型的节点,具有以下属性和子节点:

名称
类型
描述
.
cq:Template
当前模板。 模板为节点类型cq:Template。
allowedChildren
String[]
允许作为此模板子项的模板的路径。
allowedParents
String[]
允许作为此模板的父模板的路径。
allowedPath
String[]
允许基于此模板的页面的路径。
jcr:created
日期
创建模板的日期。
jcr:description
字符串
模板的描述。
jcr:title
字符串
模板的标题。
排名
模板的排名。 用于在用户界面中显示模板。
jcr:content
cq:PageContent
包含模板内容的节点。
thumbnail.png
nt:file
模板的缩略图。
icon.png
nt:file
模板的图标。

模板是页面的基础。

要创建页面,必须将模板(节点树/apps/<myapp>/template/<mytemplate>)复制到站点树中的相应位置:如果使用​ 网站 ​选项卡创建页面,则会发生这种情况。

此复制操作还会为页面提供其初始内容(通常是仅顶级内容)和属性sling:resourceType,以及用于呈现页面的页面组件的路径(子节点jcr:content中的所有内容)。

模板的结构方式 how-templates-are-structured

需要考虑两个方面:

  • 模板本身的结构
  • 使用模板时生成的内容的结构

模板的结构 the-structure-of-a-template

模板是在类型为​ cq:Template ​的节点下创建的。

screen_shot_2012-02-13at63646pm

可以设置各种属性,特别是:

  • jcr:title — 模板的标题;在创建页面时显示在对话框中。
  • jcr:description — 模板的描述;在创建页面时显示在对话框中。

此节点包含一个jcr:content (cq:PageContent)节点,该节点用作结果页面的内容节点的基础;此节点使用sling:resourceType引用要用于呈现新页面实际内容的组件。

screen_shot_2012-02-13at64010pm

此组件用于在创建新页面时定义内容的结构和设计。

screen_shot_2012-02-13at64137pm

模板生成的内容 the-content-produced-by-a-template

模板用于创建类型为cq:Page的页面(如前所述,页面是一种特殊类型的组件)。 每个AEM页都有一个结构化节点jcr:content。 此功能:

  • 属于cq:PageContent类型
  • 是保存定义的内容定义的结构化节点类型
  • 具有属性sling:resourceType,用于引用包含用于呈现内容的sling脚本的组件

默认模板 default-templates

AEM附带各种现成的默认模板。 有时,您可能希望按原样使用这些模板。 在这种情况下,必须确保模板可用于您的网站。

例如,AEM附带多个模板,包括一个内容页和主页。

标题
Component
位置
目的
主页
homepage
geometrixx
Geometrixx主页模板。
内容页面
contentpage
geometrixx
Geometrixx内容页面模板。

显示默认模板 displaying-default-templates

要查看存储库中所有模板的列表,请按照以下步骤操作:

  1. 在CRXDE Lite中,打开​ 工具 ​菜单,然后单击​ 查询

  2. 在“查询”选项卡中

  3. 作为​ 类型,选择​ XPath

  4. 在​ 查询 ​输入字段中,输入以下字符串:
    //element(*, cq:Template)

  5. 单击​ 执行。 该列表显示在结果框中。

通常,您会采用现有模板并开发一个新模板供您使用。 有关详细信息,请参阅开发页面模板

要为您的网站启用现有模板,并且您希望在从​ 网站 ​控制台直接在​ 网站 ​下创建页面时将其显示在​ 创建页面 ​对话框中,请将模板节点的allowedPaths属性设置为: /content(/)。*)?

模板设计的应用方式 how-template-designs-are-applied

当在UI中使用设计模式定义样式时,设计将保留在为其定义样式的内容节点的确切路径中。

CAUTION
Adobe建议仅通过设计模式应用设计。
例如,在CRXDE Lite中修改设计不是最佳做法,此类设计的应用可能与预期行为有所不同。

如果设计仅使用设计模式应用,则以下部分设计路径解析决策树示例不适用。

设计路径解析 design-path-resolution

在基于静态模板呈现内容时,AEM会尝试根据内容层次结构的遍历将最相关的设计和样式应用于内容。

AEM按照以下顺序确定与内容节点最相关的样式:

  • 如果存在内容节点的完整和精确路径的设计(当设计在设计模式下定义时),则使用该设计。
  • 如果存在父级内容节点的设计,则使用该设计。
  • 如果内容节点的路径上有任何节点的设计,则使用该设计。

在后两种情况下,如果有多个适用的设计,则使用最接近内容节点的设计。

决策树 decision-tree

这是设计路径解析逻辑的图形表示。

design_path_resolution

示例 example

请考虑以下简单的内容结构,其中设计可应用于任何节点:

/root/branch/leaf

下表描述了AEM如何选择设计。

查找设计
存在以下设计
已选择设计
注释
leaf

root

branch

leaf

leaf
始终采用最精确的匹配项。
leaf

root

branch

branch
回退到树中最接近的匹配项。
leaf
root
root
如果其他所有操作失败,则采用剩余的部分。
branch
branch
branch
branch

branch

leaf

branch
branch

root

branch

branch
branch

root

leaf

root

如果没有完全匹配项,则取树中较低的一个。

假设这始终适用,但树的上方可能太具体。

开发页面模板 developing-page-templates

AEM页面模板只是用于创建页面的模型。 它们可以根据需要包含尽可能少或尽可能多的初始内容,其角色是创建正确的初始节点结构,并将所需的属性(主要是sling:resourceType)设置为允许编辑和渲染。

创建模板(基于现有模板) creating-a-new-template-based-on-an-existing-template

可以完全从头开始创建新模板,但通常会复制并更新现有模板,以节省您的时间和精力。 例如,可以使用Geometrixx中的模板来帮助您入门。

要基于现有模板创建模板,请执行以下操作:

  1. 将现有模板(最好使用尽可能接近所要实现的定义)复制到新节点。

    模板存储在​ /apps/<网站名称>/templates/<模板名称> ​中。

    note note
    NOTE
    可用模板的列表取决于新页面的位置以及在每个模板中指定的放置限制。 查看模板可用性
  2. 更改新模板节点的​ jcr:title ​以反映其新角色。 您还可以更新​ jcr:description(如果适用)。 请确保根据需要更改页面的模板可用性。

    note note
    NOTE
    如果要在从​ 网站 ​控制台直接在​ 网站 ​下创建页面时在​ 创建页面 ​对话框中显示模板,请将模板节点的allowedPaths属性设置为: /content(/.*)?

    chlimage_1-88

  3. 复制模板所基于的组件(由模板中​ jcr:content ​节点的​ sling:resourceType ​属性指示)以创建实例。

    组件存储在​ /apps/<网站名称>/components/<组件名称> ​中。

  4. 更新新组件的​ jcr:title ​和​ jcr:description

  5. 如果您希望在模板选择列表(大小为128 x 98像素)中显示新的缩略图,请替换thumbnail.png。

  6. 更新模板的​ jcr:content ​节点的​ sling:resourceType ​以引用新组件。

  7. 对模板、其基础组件或两者的功能或设计进行其他更改。

    note note
    NOTE
    对​**/apps/<website>/templates/<template-name>**​节点所做的更改会影响模板实例(在选择列表中一样)。
    对​**/apps/<website>/components/<component-name>**​节点所做的更改会影响使用模板时创建的内容页面。

    您现在可以使用新模板在网站中创建页面。

NOTE
编辑器客户端库假定内容页面中存在cq.shared命名空间,如果该命名空间不存在,则会出现JavaScript错误Uncaught TypeError: Cannot read property 'shared' of undefined
所有示例内容页面都包含cq.shared,因此任何基于它们的内容都会自动包含cq.shared。 但是,如果您决定从头开始创建自己的内容页面,而不基于示例内容,则必须确保包含cq.shared命名空间。
有关详细信息,请参阅使用客户端库

使现有模板可用 making-an-existing-template-available

此示例说明如何允许将模板用于特定内容路径。 创建页面时可供页面作者使用的模板由模板可用性中定义的逻辑决定。

  1. 在CRXDE Lite中,导航到要用于页面的模板,例如新闻稿模板。

  2. 更改用于模板可用性allowedPaths属性和其他属性。 例如,allowedPaths/content/geometrixx-outdoors/[^/]+(/.*)?表示此模板允许位于/content/geometrixx-outdoors下的任何路径中。

    chlimage_1-89

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2