页面模板

创建页面时,您需要选择模板。 页面模板用作新页面的基础。 模板可定义生成页面的结构、任何初始内容以及可使用的组件(设计属性)。这具有以下几个优势:

  • 页面模板允许专业作者 创建和编辑模板.
    • 这种专业作者被称为 模板作者
    • 模板作者必须是 template-authors 群组。
  • 页面模板会保留与从这些模板创建的任何页面的动态连接。 这可确保模板的任何更改都反映在页面本身中。
  • 页面模板可使页面组件更加通用,因此无需自定义即可使用核心页面组件。

使用页面模板,可在组件中分离出用于创建页面的片段。 您可以在UI中配置组件的必要组合,从而无需为每个页面变体开发新的页面组件。

本文档:

  • 概述如何创建页面模板
  • 描述创建可编辑模板所需的管理员/开发人员任务
  • 描述可编辑模板的技术基础
  • 描述AEM如何评估模板的可用性
注意

本文档假定您已经熟悉创建和编辑模板。 请参阅创作文档 创建页面模板,其中详细介绍了向模板作者显示的可编辑模板的功能。

小贴士

WKND教程 深入介绍了如何通过实施示例来使用页面模板,对于了解如何在新项目中设置模板非常有用

创建新模板

创建页面模板主要通过 模板控制台和模板编辑器 模板作者。 本节概述了此过程,并随后介绍了在技术层面发生的情况。

创建新的可编辑模板时,您需要执行以下步骤:

  1. 创建 模板文件夹. 这不是强制性的,但建议使用最佳实践。

  2. 选择 模板类型. 此操作将复制以创建 模板定义.

    注意

    提供了一系列现成的模板类型。 您还可以 创建您自己的特定于网站的模板类型 (如果需要)。

  3. 配置新模板的结构、内容策略、初始内容和布局。

    结构

    • 利用结构,可为模板定义组件和内容。
    • 不能在生成页面上移动在模板结构中定义的组件,也不能从任何生成页面中删除这些组件。
    • 如果要使页面作者能够添加和删除组件,请在模板中添加段落系统。
    • 可以解锁组件,然后再将其锁定,以便定义初始内容。

    有关模板作者如何定义结构的详细信息,请参阅 创建页面模板.

    有关结构的技术详细信息,请参阅 结构 在本文档中。

    策略

    • 内容策略可定义组件的设计属性。

      • 例如,可用的组件或最小/最大尺寸。
    • 这些属性适用于模板(和使用模板创建的页面)。

    有关模板作者如何定义策略的详细信息,请参阅 创建页面模板.

    有关策略的技术详细信息,请参阅 内容策略 在本文档中。

    初始内容

    • 初始内容定义在首次基于模板创建页面时显示的内容。
    • 然后,页面作者可以编辑初始内容。

    有关模板作者如何定义结构的详细信息,请参阅 创建页面模板.

    有关初始内容的技术详细信息,请参阅 初始内容 在本文档中。

    布局

    • 您可以为各种设备定义模板布局。
    • 模板的响应式布局与页面创作时的响应式布局功能相同。

    有关模板作者如何定义模板布局的详细信息,请参阅 创建页面模板.

    有关模板布局的技术详细信息,请参阅 布局 在本文档中。

  4. 启用模板,然后为特定内容树启用它。

    • 可以启用或禁用模板,以使其对页面作者可用或不可用。
    • 可以使模板可用于或不可用于某些页面分支。

    有关模板作者如何启用模板的详细信息,请参阅 创建页面模板.

    有关启用模板的技术详细信息,请参阅 为我们启用和允许模板本文档中的e

  5. 使用它创建内容页面。

    • 使用静态模板和可编辑的模板创建新页面的过程没有明显的区别,也没有孰优孰劣之分。
    • 对于页面作者而言,该创建过程一目了然。

    有关页面作者如何使用模板创建页面的详细信息,请参阅 创建和组织页面.

    有关使用可编辑模板创建页面的技术详细信息,请参阅 生成内容页面 在本文档中。

小贴士

切勿在模板中输入任何需要国际化的信息。出于内部化目的, 核心组件的本地化功能

注意

模板是简化页面创建工作流的强大工具。不过,太多的模板会让作者不知所措,并使页面创建变得混乱。一个好的经验法则是将模板的数量保持在 100 个以内。

由于潜在的性能影响,Adobe 建议不要使用超过 1000 个模板。

注意

编辑器客户端库假定存在 cq.shared 命名空间,如果不存在JavaScript错误,则使用 Uncaught TypeError: Cannot read property 'shared' of undefined 结果。

所有示例内容页面都包含 cq.shared,因此基于这些内容的任何内容都会自动包含 cq.shared. 但是,如果您决定从头开始创建自己的内容页面,而不基于示例内容,则必须确保包含 cq.shared 命名空间。

请参阅 使用客户端库 以了解更多信息。

模板文件夹

要组织模板,您可以使用以下文件夹:

  • global
  • 特定于网站
注意

即使您可以嵌套文件夹,当用户在 模板 控制台以平面结构呈现。

在标准AEM实例中, global “模板”控制台中已存在文件夹。 此文件夹会保存默认模板,如果在当前文件夹中没有找到策略和/或模板类型,则此文件夹可以充当备用。您可以将默认模板添加到此文件夹或创建新文件夹(推荐)。

注意

最佳做法是创建新文件夹以保存自定义模板,而不使用 global 文件夹。

注意

文件夹必须由具有 admin 权限。

模板类型和策略将按照以下优先顺序继承到所有文件夹:

  1. 当前文件夹
  2. 当前文件夹的父项
  3. /conf/global
  4. /apps
  5. /libs

将创建所有允许条目的列表。 如果有任何配置重叠( path/ label),则只会向用户显示最接近当前文件夹的实例。

要创建新文件夹,您可以执行以下操作之一:

使用 CRXDE Lite

  1. 可以采用编程方式或通过CRXDE Lite为实例创建新文件夹(在/conf下)。

    必须使用以下结构:

    /conf
        <your-folder-name> [sling:Folder]
            settings [sling:Folder]
                wcm [cq:Page]
                    templates [cq:Page]
                    policies [cq:Page]
    
  2. 然后,您可以在文件夹根节点上定义以下属性:

    <your-folder-name> [sling:Folder]

    • 名称: jcr:title
    • 类型: String
    • 值:要显示在 模板 控制台。
  3. 除了标准创作权限和权限(例如 content-authors),您现在需要为作者分配组并定义所需的访问权限(ACL),以便在新文件夹中创建模板。

    template-authors 组是需要分配的默认组。 请参阅部分 ACL和组 以了解详细信息。

使用配置浏览器

  1. 转到 全局导航 -> 工具 > 配置浏览器.

    现有文件夹将列在左侧,包括 global 文件夹。

  2. 单击​创建

  3. 创建配置 对话框需要配置以下字段:

    • 标题:为配置文件夹提供标题
    • 可编辑的模板:勾号,允许在此文件夹中编辑模板
  4. 单击 创建

注意

配置浏览器、 您可以编辑全局文件夹并激活 可编辑的模板 选项,但建议不要使用此文件夹创建模板。

ACL和组

创建模板文件夹(通过CRXDE或使用配置浏览器)后,必须为模板文件夹的相应组定义ACL,以确保适当的安全性。

的模板文件夹 WKND教程 例子。

模板作者组

template-authors 组是用于管理模板访问权限的组,其标准中包含AEM,但为空。 必须将用户添加到项目/站点的组。

注意

template-authors 群组仅适用于必须能够创建新模板的用户。

编辑模板非常强大,如果未正确完成,现有模板可能会被破坏。 因此,此角色应该重点突出,并且仅包含符合条件的用户。

下表详细列出了进行模板编辑所需的权限。

路径 角色/组 权限
描述
/conf/<your-folder>/settings/wcm/templates 模板作者
读、写、复制 在特定于站点的模板中创建、读取、更新、删除和复制模板的模板作者 /conf 空间
匿名Web用户 读取 匿名Web用户在渲染页面时必须读取模板
内容作者 复制 激活页面时,replicateContent作者需要激活页面的模板
/conf/<your-folder>/settings/wcm/policies Template Author 读、写、复制 在特定于站点的模板中创建、读取、更新、删除和复制模板的模板作者 /conf 空间
匿名Web用户 读取 匿名Web用户在渲染页面时必须读取策略
内容作者 复制 内容作者在激活页面时需要激活页面模板的策略
/conf/<site>/settings/template-types 模板作者 读取 模板作者基于其中一种预定义的模板类型创建新模板。
匿名Web用户 匿名Web用户不得访问模板类型

此默认 template-authors 组仅涵盖项目设置,其中 template-authors 允许成员访问和创作所有模板。 对于更复杂的设置,在设置中需要多个模板作者组来分隔对模板的访问权限,必须创建更多自定义模板作者组。 但是,模板作者组的权限将保持不变。

模板类型

创建新模板时,您需要指定模板类型:

  • 模板类型有效地为模板提供模板。 创建新模板时,将使用所选模板类型的结构和初始内容创建新模板。

    • 将复制模板类型以创建模板。
    • 复制后,模板与模板类型之间的唯一连接便是用于获取信息的静态引用。
  • 模板类型允许您定义:

    • 页面组件的资源类型。
    • 根节点的策略,用于定义模板编辑器中允许的组件。
    • 建议为响应式网格定义断点,并在模板类型上的设置移动模拟器。
  • AEM提供了一小部分现成的模板类型,如“HTML5页面”和“自适应表单页面”。

  • 模板类型通常由开发人员定义。

现成模板类型存储在以下位置:

  • /libs/settings/wcm/template-types
注意

您不得在 /libs 路径。 这是因为 /libs 可随时被AEM更新覆盖。

您特定于网站的模板类型应存储在以下可比位置:

  • /apps/settings/wcm/template-types

自定义模板类型的定义应存储在用户定义的文件夹中(推荐),或者存储在 global. 例如:

  • /conf/<my-folder-01>/<my-folder-02>/settings/wcm/template-types
  • /conf/<my-folder>/settings/wcm/template-types
  • /conf/global/settings/wcm/template-types
注意

模板类型必须遵循正确的文件夹结构(即 /settings/wcm/...),否则将找不到模板类型。

创建模板类型

如果已创建可用作其他模板基础的模板,则可以将此模板复制为模板类型。

  1. 像创建任何页面模板一样创建模板 如此处所述,用作模板类型的基础。
  2. 使用CRXDE Lite,从 templates 节点 template-types 节点下 模板文件夹.
  3. templates 节点下 模板文件夹.
  4. 在位于 template-types 节点,删除全部 cq:templatecq:templateType jcr:content 属性。

您还可以使用GitHub上提供的可编辑模板示例作为基础,开发您自己的模板类型。

GITHUB上的代码

您可以在GitHub上找到此页面的代码

模板定义

可编辑模板的定义已存储 用户定义的文件夹 (推荐)或 global. 例如:

  • /conf/<my-folder>/settings/wcm/templates
  • /conf/<my-folder-01>/<my-folder-02>/settings/wcm/templates
  • /conf/global/settings/wcm/templates

模板的根节点类型为 cq:Template 骨架结构为:

<template-name>
  initial
    jcr:content
      root
        <component>
        ...
        <component>
  jcr:content
    @property status
  policies
    jcr:content
      root
        @property cq:policy
        <component>
          @property cq:policy
        ...
        <component>
          @property cq:policy
  structure
    jcr:content
      root
        <component>
        ...
        <component>
      cq:responsive
        breakpoints
  thumbnail.png

主要元素包括:

  • <template-name>

    • [initial](#initial-content)
    • jcr:content
    • [structure](#structure)
    • [policies](#policies)
    • thumbnail.png

jcr:content

此节点包含模板的属性:

  • 名称: jcr:title
  • 名称: status
    • ``类型: String
    • : draft, enableddisabled

结构

定义生成页面的结构:

  • 与初始内容( /initial)。

  • 对结构所做的更改将会反映在使用该模板创建的任何页面中。

  • root ( structure/jcr:content/root)节点定义将在生成页面中可用的组件列表。

    • 无法在任何生成页面上移动或删除在模板结构中定义的组件。
    • 解锁组件后, editable 属性设置为 true.
    • 解锁已包含内容的组件后,此内容将被移动到 initial 分支。
  • cq:responsive 节点包含响应式布局的定义。

初始内容

定义新页面在创建时将包含的初始内容:

  • 包含 jcr:content 节点。
  • 与结构合并( /structure)。
  • 如果初始内容在创建后发生更改,则不会更新任何现有页面。
  • root 节点包含一个组件列表,用于定义将在生成页面中可用的组件。
  • 如果在结构模式下将内容添加到组件,并且该组件随后被解锁(反之亦然),则此内容将用作初始内容。

布局

When 编辑可定义布局的模板,使用 标准响应式布局.

内容策略

内容策略可定义组件的设计属性。 例如,可用的组件或最小/最大尺寸。这些属性适用于模板(和使用模板创建的页面)。可以在模板编辑器中创建和选择内容策略。

  • 资产 cq:policy,在 root 节点
    /conf/<your-folder>/settings/wcm/templates/<your-template>/policies/jcr:content/root
    为页面的段落系统提供对内容策略的相对引用。

  • 资产 cq:policy,在下的组件显式节点上 root,则提供各个组件的策略链接。

  • 实际策略定义存储在以下位置:
    /conf/<your-folder>/settings/wcm/policies/wcm/foundation/components

注意

策略定义的路径取决于组件的路径。 cq:policy 包含对配置本身的相对引用。

页面策略

页面策略允许您定义 内容策略 对于页面(主parsys),在模板或生成页面中。

启用和允许模板使用

  1. 启用模板

    模板必须通过以下任一方式启用,才能使用:

    • 启用模板模板 控制台。

    • jcr:content 节点。

      • 例如,在:

        /conf/<your-folder>/settings/wcm/templates/<your-template>/jcr:content

      • 定义属性:

        • 名称:状态
        • 类型:字符串
        • 值: enabled
  2. 允许的模板

    /conf/<your-folder>/settings/wcm/templates/.*

生成内容页面

从可编辑模板创建的页面:

  • 创建时使用的是从中合并的子树 structureinitial 在模板中

  • 对模板和模板类型中包含的信息进行引用。 这是通过 jcr:content 的节点:

    • cq:template — 提供对实际模板的动态引用;允许将对模板所做的更改反映在实际页面上。

    • cq:templateType — 提供对模板类型的引用。

模板、内容和组件如何相互关联

上图显示了模板、内容和组件如何相互关联:

  • 控制器 — /content/<my-site>/<my-page> — 引用模板的生成页面。 内容控制着整个过程。 根据定义,访问相应的模板和组件。
  • 配置 — /conf/<my-folder>/settings/wcm/templates/<my-template> - 模板和相关内容策略 定义页面配置。
  • 模型 — OSGi包 — OSGi包 实施功能。
  • 查看 — /apps/<my-site>/components — 在创作和发布环境中,内容由组件呈现。

渲染页面时:

  • 模板:

    • cq:template 其属性 jcr:content 将引用节点以访问与该页面对应的模板。
  • 组件:

    • 页面组件将合并 structure/jcr:content 模板的树 jcr:content 页面树。
      • 页面组件将仅允许作者编辑已标记为可编辑的模板结构的节点(以及任何子节点)。
      • 在页面上渲染组件时,该组件的相对路径将从 jcr:content 节点;同一条路 policies/jcr:content 随后将搜索模板的节点。
        • cq:policy 此节点的属性指向实际的内容策略(即它包含该组件的设计配置)。
          • 这样,您就可以拥有多个重复使用相同内容策略配置的模板。

模板可用性

在站点管理界面中创建新页面时,可用模板的列表取决于新页面的位置以及在每个模板中指定的放置限制。

以下属性确定模板是否 T 允许将新页面用作页面的子项 P. 以下每个属性都是一个包含零个或多个正则表达式的多值字符串,用于与路径匹配:

  • cq:allowedTemplates 属性 jcr:content 子节点 PP.

  • allowedPaths 财产 T.

  • allowedParents 财产 T.

  • allowedChildren 模板的属性 P.

评价工作如下:

  • 第一个非空 cq:allowedTemplates 属性,该属性在页面层次结构的升序时以开头 PT. 如果没有值匹配, T 被拒绝。

  • 如果 T 具有非空 allowedPaths 属性,但没有任何值与 P, T 被拒绝。

  • 如果上述两个属性为空或不存在, T 被拒绝,除非它属于与 P. T 属于与 P 如果且仅当路径的第二级名称 T 与路径的第二级名称相同 P. 例如,模板 /apps/wknd/templates/foo 属于与页面相同的应用程序 /content/wknd.

  • 如果 T 具有非空 allowedParents 属性,但没有任何值与 P, T 被拒绝。

  • 如果的模板 P 具有非空 allowedChildren 属性,但没有任何值与 T, T 被拒绝。

  • 在所有其他情况下, T 中的“禁止页面加载闪烁”。

下图描述了模板评估流程:

模板评估过程

注意

AEM提供了多个属性来控制 站点. 但是,将它们组合在一起可能会导致非常复杂的规则,从而难以跟踪和管理。

因此,Adobe建议您首先通过定义以下内容来简单操作:

  • 只有 cq:allowedTemplates 属性

  • 仅在站点根目录上

有关示例,请参阅 WKND教程 内容: /content/wknd/jcr:content

属性 allowedPaths, allowedParentsallowedChildren 也可以放置在模板上以定义更复杂的规则。 但是,如果可能, 更简单地进一步定义 cq:allowedTemplates 网站子区域的属性(如果需要进一步限制允许的模板)。

另一个优势是 cq:allowedTemplates 属性可由作者在 高级 选项卡 页面属性. 无法使用(标准)UI更新其他模板属性,因此需要开发人员为每次更改维护规则和代码部署。

子页面中使用的限制模板

要限制可在给定页面下创建子页面的模板,请使用 cq:allowedTemplates 财产 jcr:content 用于指定允许作为子页面的模板列表的页面节点。 列表中的每个值都必须是允许的子页面模板的绝对路径,例如 /apps/wknd/templates/page-content.

您可以使用 cq:allowedTemplates 模板上的属性 jcr:content 节点,以将此配置应用于使用此模板的所有新创建页面。

如果要添加更多约束(例如与模板层次结构有关的约束),可以使用 allowedParents/allowedChildren 属性。 然后,您可以明确指定从模板T创建的页面必须是从模板T创建的页面的父/子页面。

在此页面上