页面模板 page-templates
创建页面时,您需要选择模板。 页面模板用作新页面的基础。 模板定义生成页面的结构、任何初始内容以及可以使用的组件(设计属性)。 这有几个优点:
-
利用页面模板,专业作者可以 创建和编辑模板.
- 这种专业作者被称为 模板作者
- 模板作者必须是
template-authors
组。
-
页面模板会保留与从中创建的任何页面的动态连接。 这可确保对模板所做的任何更改都会反映在页面本身中。
-
页面模板使页面组件变得更通用,以便无需自定义即可使用核心页面组件。
使用页面模板,构成页面的片段被隔离在组件中。 您可以在UI中配置必要的组件组合,从而无需为每个页面变体开发新的页面组件。
本文档:
- 提供了创建页面模板的概述
- 描述创建可编辑模板所需的管理员/开发人员任务
- 描述可编辑模板的技术基础
- 描述AEM如何评估模板的可用性
创建新模板 creating-a-new-template
创建页面模板主要是通过 模板控制台和模板编辑器 模板作者执行的操作。 本节概述了此过程,并在后面描述了技术级别所发生的情况。
创建可编辑模板时,您可以:
-
创建 模板文件夹. 这并非强制要求,但建议采用最佳实践。
-
note note NOTE 现成提供模板类型选择。 您还可以 创建您自己的特定于站点的模板类型 如有必要。 -
配置新模板的结构、内容策略、初始内容和布局。
结构
- 利用结构,可为模板定义组件和内容。
- 不能在生成页面上移动在模板结构中定义的组件,也不能从任何生成页面中删除这些组件。
- 如果要使页面作者能够添加和删除组件,请在模板中添加段落系统。
- 可以解锁组件,然后再将其锁定,以便定义初始内容。
有关模板作者如何定义结构的详细信息,请参阅 创建页面模板.
有关结构的技术详细信息,请参阅 结构 在本文档中。
策略
-
内容策略定义组件的设计属性。
- 例如,可用的元件或最小/最大尺寸。
-
这些属性适用于模板(和使用模板创建的页面)。
有关模板作者如何定义策略的详细信息,请参阅 创建页面模板.
有关策略的技术详细信息,请参阅 内容策略 在本文档中。
初始内容
- 初始内容定义首次根据模板创建页面时将显示的内容。
- 随后,页面作者可以编辑初始内容。
有关模板作者如何定义结构的详细信息,请参阅 创建页面模板.
有关初始内容的技术详细信息,请参阅 初始内容 在本文档中。
布局
- 您可以为各种设备定义模板布局。
- 模板的响应式布局与页面创作时的响应式布局功能相同。
有关模板作者如何定义模板布局的详细信息,请参阅 创建页面模板.
有关模板布局的技术详细信息,请参阅 布局 在本文档中。
-
启用模板,然后为特定内容树允许该模板。
- 可以启用或禁用模板,使其对页面作者可用或不可用。
- 可以使模板可用于或不可用于某些页面分支。
有关模板作者如何启用模板的详细信息,请参阅 创建页面模板.
有关启用模板的技术详细信息,请参阅 为我们启用和允许模板e在此文档中
-
使用它创建内容页面。
- 使用模板创建页面时,静态模板与可编辑模板之间没有可见的区别和指示。
- 对于页面作者,该过程是透明的。
有关页面作者如何使用模板创建页面的详细信息,请参阅 创建和组织页面.
有关使用可编辑模板创建页面的技术详细信息,请参阅 生成内容页面 在本文档中。
cq.shared
命名空间在内容页面中,如果它不存在,则会出现JavaScript错误 Uncaught TypeError: Cannot read property 'shared' of undefined
就会有结果。cq.shared
,因此任何基于它们的内容都会自动包含 cq.shared
. 但是,如果您决定从头开始创建自己的内容页面,而不基于示例内容,则必须确保包含 cq.shared
命名空间。模板文件夹 template-folders
要组织模板,您可以使用以下文件夹:
global
- 站点特定
在标准AEM实例中, global
模板控制台中已存在文件夹。 该文件夹会保存默认模板,如果在当前文件夹中未找到策略和/或模板类型,则该文件夹会充当备用。 您可以将默认模板添加到此文件夹或创建文件夹(推荐)。
global
文件夹。admin
权限。模板类型和策略将按照以下优先级顺序跨所有文件夹继承:
- 当前文件夹
- 当前文件夹的父文件夹
/conf/global
/apps
/libs
将创建所有允许条目的列表。 如果任何配置重叠( path
/ label
),则只有最接近当前文件夹的实例才会呈现给用户。
要创建文件夹,您可以执行以下操作:
- 以编程方式或使用CRXDE Lite
- 使用 配置浏览器
使用 CRXDE Lite using-crxde-lite
-
可以通过编程方式或使用CRXDE Lite为实例创建新文件夹(位于/conf下)。
必须使用以下结构:
code language-xml /conf <your-folder-name> [sling:Folder] settings [sling:Folder] wcm [cq:Page] templates [cq:Page] policies [cq:Page]
-
然后,您可以在文件夹根节点上定义以下属性:
<your-folder-name> [sling:Folder]
- 名称:
jcr:title
- 类型:
String
- 值:您希望在中显示的标题(针对文件夹) 模板 控制台。
- 名称:
-
除了标准创作权限之外(例如,
content-authors
)现在,您需要分配组并定义作者所需的访问权限(ACL),以便能够在新文件夹中创建模板。此
template-authors
group是必须分配的默认组。 请参阅部分 ACL和组 以了解详细信息。
使用配置浏览器 using-the-configuration-browser
-
转到 全局导航 > 工具 > 配置浏览器.
左侧列出了现有文件夹,包括
global
文件夹。 -
单击 创建。
-
在 创建配置 对话框需要配置以下字段:
- 标题:提供配置文件夹的标题
- 可编辑的模板:勾选以允许在此文件夹中使用可编辑的模板
-
单击 创建
ACL和组 acls-and-groups
创建模板文件夹(通过CRXDE或使用配置浏览器)后,必须为模板文件夹的相应组定义ACL,以确保适当的安全性。
的模板文件夹 wknd教程 可用作示例。
模板作者组 the-template-authors-group
此 template-authors
group是用于管理对模板的访问权限的组,它是AEM的标准配置,但为空。 必须将用户添加到项目/站点的组中。
template-authors
组仅适用于必须能够创建新模板的用户。下表详细列出了模板编辑所需的权限。
此默认值 template-authors
组仅涵盖项目设置,其中 template-authors
允许成员访问和创作所有模板。 对于更复杂的设置,需要多个模板作者组来分隔对模板的访问,则必须创建更多自定义模板作者组。 但是,模板作者组的权限将仍然相同。
模板类型 template-type
创建模板时,您需要指定模板类型:
-
模板类型可以有效地为模板提供模板。 创建模板时,使用所选模板类型的结构和初始内容创建新模板。
- 将复制模板类型以创建模板。
- 复制完成后,模板和模板类型之间的唯一连接是用作信息的静态引用。
-
模板类型允许您定义:
- 页面组件的资源类型。
- 根节点的策略,用于定义模板编辑器中允许的组件。
- 建议为响应式网格定义断点,并在模板类型上设置移动设备模拟器。
-
AEM提供了少量的现成模板类型,如“HTML5页面”和“自适应表单页面”。
- 其他示例作为 wknd教程.
-
模板类型通常由开发人员定义。
现成的模板类型存储在下:
/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/...
),否则将无法找到模板类型。创建模板类型 creating-template-types
如果您已创建可作为其他模板基础的模板,则可以将此模板作为模板类型复制。
您还可以在GitHub上使用示例可编辑模板作为基础来开发自己的模板类型。
GITHUB上的代码
您可以在GitHub上找到此页面的代码
模板定义 template-definitions
可编辑模板的定义已存储 用户定义的文件夹 (推荐)或在 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-content
此节点保存模板的属性:
-
名称:
jcr:title
-
名称:
status
- "类型:
String
- 值:
draft
,enabled
或disabled
- "类型:
结构 structure
定义生成页面的结构:
-
与初始内容合并(
/initial
)。 -
对结构所做的更改会反映在使用模板创建的任何页面中。
-
此
root
(structure/jcr:content/root
)节点定义生成页面中可用的组件列表。- 无法在任何生成页面上移动或删除在模板结构中定义的组件。
- 解锁组件后,
editable
属性设置为true
. - 解锁已包含内容的组件后,此内容将被移至
initial
分支。
-
此
cq:responsive
节点包含响应布局的定义。
初始内容 initial-content
定义新页面在创建时将具有的初始内容:
- 包含
jcr:content
复制到任何新页面的节点。 - 与结构合并(
/structure
)。 - 如果在创建后更改了初始内容,则不会更新任何现有页面。
- 此
root
节点包含组件列表,用于定义生成的页面中可用的组件。 - 如果在结构模式下将内容添加到组件且随后解锁该组件(或反之),则此内容将用作初始内容。
布局 layout
时间 编辑模板您可以定义布局,此函数使用 标准响应布局.
内容策略 content-policies
内容策略定义组件的设计属性。 例如,可用的组件或最小/最大尺寸。这些选项适用于模板(以及使用该模板创建的页面)。 可以在模板编辑器中创建和选择内容策略。
-
属性
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
保存对配置本身的相对引用。页面策略 page-policies
页面策略允许您定义 内容策略 页面(主parsys)的模板或生成页面中。
启用和允许使用模板 enabling-and-allowing-a-template-for-use
-
启用模板
在使用模板之前,必须通过以下任一方式启用模板:
-
启用模板 从 模板 控制台。
-
在上设置状态属性
jcr:content
节点。-
例如,在:
/conf/<your-folder>/settings/wcm/templates/<your-template>/jcr:content
-
定义属性:
- 名称:状态
- 类型:字符串
- 值:
enabled
-
-
-
允许的模板
-
在上定义允许的模板路径 页面属性 子分支的相应页面或根页面的ID。
-
设置属性:
cq:allowedTemplates
在jcr:content
所需分支的节点。
例如,其值为:
/conf/<your-folder>/settings/wcm/templates/.*
-
生成内容页面 resultant-content-pages
从可编辑模板创建的页面:
-
使用合并的子树创建
structure
和initial
在模板中 -
具有对模板和模板类型中包含的信息的引用。 这是通过实现的
jcr:content
节点的属性:-
cq:template
— 提供对实际模板的动态引用;使对模板所做的更改能够反映在实际页面上。 -
cq:templateType
— 提供对模板类型的引用。
-
上图显示了模板、内容和组件如何相互关联:
呈现页面时:
-
模板:
- 此
cq:template
其属性jcr:content
节点被引用以访问与该页面对应的模板。
- 此
-
组件:
-
页面组件将合并
structure/jcr:content
模板树jcr:content
页面的树。- 页面组件将仅允许作者编辑已标记为可编辑的模板结构的节点(以及任何子节点)。
- 在页面上呈现组件时,该组件的相对路径将从
jcr:content
节点;同一路径位于policies/jcr:content
随后将搜索模板的节点。- 此
cq:policy
此节点的属性指向实际内容策略(即,它包含该组件的设计配置)。- 这样,您就可以拥有多个重复使用相同内容策略配置的模板。
- 此
-
模板可用性 template-availability
在站点管理界面中创建页面时,可用模板的列表取决于新页面的位置以及在每个模板中指定的版面限制。
以下属性确定模板是否 T
允许用于作为页面的子项放置的新页面 P
. 以下每个属性都是一个多值字符串,其中包含零个或多个用于与路径匹配的正则表达式:
-
此
cq:allowedTemplates
的属性jcr:content
子节点P
或祖先P
. -
此
allowedPaths
属性T
. -
此
allowedParents
属性T
. -
此
allowedChildren
模板的属性P
.
评估工作如下:
-
第一个非空
cq:allowedTemplates
在页面层次结构中以开始升序时发现属性P
的路径匹配T
. 如果没有任何值匹配,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
允许。
下图描述了模板评估流程:
-
仅
cq:allowedTemplates
属性 -
仅在站点根目录上
/content/wknd/jcr:content
allowedPaths
, allowedParents
、和 allowedChildren
还可以放置在模板上以定义更复杂的规则。 但是,如果可能,它是 很多 更简单以进一步定义 cq:allowedTemplates
属性(如果需要进一步限制允许的模板)。cq:allowedTemplates
作者可以在以下位置更新属性 高级 选项卡 页面属性. 无法使用(标准)UI更新其他模板属性,因此需要开发人员维护规则和每次更改的代码部署。限制子页面中使用的模板 limiting-templates-used-in-child-pages
要限制哪些模板可用于在给定页面下创建子页面,请使用 cq:allowedTemplates
属性 jcr:content
页面的节点,用于指定允许作为子页面的模板列表。 列表中的每个值都必须是允许的子页面模板的绝对路径,例如, /apps/wknd/templates/page-content
.
您可以使用 cq:allowedTemplates
模板的属性 jcr:content
节点,用于将此配置应用于使用此模板的所有已创建页面。
例如,如果要添加更多关于模板层次结构的约束,可以使用 allowedParents/allowedChildren
属性。 然后,您可以明确指定从模板T创建的页面必须是从模板T创建的页面的父项/子项。