在础贰惭中使用厂濒颈苍驳资源合并器 using-the-sling-resource-merger-in-aem
用途 purpose
Sling资源合并提供访问和合并资源的服务。 它提供了以下两种情况的差异(差异)机制:
通过厂濒颈苍驳资源合并器,覆盖/覆盖资源和/或属性与原始资源/属性合并:
-
自定义定义内容的优先级高于原始定义的优先级(即? 覆盖 ?或? 覆盖)。
-
根据需要,自定义项中定义的属性指示如何使用从原始内容合并的内容。
础贰惭的目标 goals-for-aem
在础贰惭中使用厂濒颈苍驳资源合并器的目标如下:
-
确保未在
/libs中进行自定义更改。 -
减少从
/libs复制的结构。在使用厂濒颈苍驳资源合并器时,不建议从
/libs中复制整个结构,因为这将导致自定义项中包含过多的信息(通常为/apps)。 在系统以某种方式升级时,不必要地复制信息会增加出现问题的机会。
sling:resourceSuperType建立连接。/apps下定义,因为础贰惭中的最佳实践是在/apps下定义自定义项;这是因为您不能更改/libs下的任何内容。/libs路径中的任何内容。/libs的内容会被覆盖(在应用修补程序或功能包时很可能会被覆盖)。-
在
/apps下重新创建所需项(即/libs中存在的项) -
在
/apps中进行任何更改
属性 properties
资源合并器提供以下属性:
-
sling:hideProperties(String或String[])指定要隐藏的属性或属性列表。
通配符
*会隐藏所有。 -
sling:hideResource(Boolean)指示是否应完全隐藏资源,包括其子资源。
-
sling:hideChildrenString( 或String[])包含要隐藏的子节点或子节点列表。 将保留节点的属性。
通配符
*隐藏所有内容。 -
sling:orderBeforeString( )包含当前节点应位于其前面的同级节点的名称。
这些属性影响迭加/覆盖(通常在/apps中)使用相应/原始资源/属性(来自/libs)的方式。
创建结构 creating-the-structure
要创建覆盖或覆盖,您需要在目标(通常为/apps)下使用等效结构重新创建原始节点。 例如:
-
迭加
-
站点控制台的导航条目(如边栏中所示)的定义定义定义位于:
/libs/cq/core/content/nav/sites/jcr:title -
要迭加此节点,请创建以下节点:
/apps/cq/core/content/nav/sites然后根据需要更新属性
jcr:title。
-
-
替代
-
为文本控制台定义启用了触屏的对话框的定义位于:
/libs/foundation/components/text/cq:dialog -
要覆盖此设置,请创建以下节点 - 例如:
/apps/the-project/components/text/cq:dialog
-
要创建其中任何一个,您只需重新创建骨架结构。 为了简化结构的重新创建,所有中间节点都可以是类型 nt:unstructured (它们不必反映原始节点类型;例如,在 中 /libs)。
因此,在上面的覆盖示例中,需要以下节点:
/apps
/cq
/core
/content
/nav
/sites
/libs 复制整个结构,因为这会导致 中 /apps保存太多信息。 当系统以任何方式升级时,这可能会导致问题。用例 use-cases
这些功能与标准功能相结合,使您能够:
-
添加属性
属性在
/libs定义中不存在,但在/apps覆盖/覆盖中是必需的。- 在
/apps中创建对应的节点 - 在此节点上创建新属性?
- 在
-
重新定义属性(不是自动创建的属性)
属性在
/libs中定义,但在/apps覆盖/覆盖中需要新值。-
在
/apps中创建对应的节点 -
在此节点上创建匹配属性(在/
apps下)-
该资产的优先级将基于厂濒颈苍驳资源解析程序配置。
-
支持更改属性类型。
如果使用的属性类型与 中使用的
/libs属性类型不同,则将使用您定义的属性类型。
-
note note NOTE 支持更改属性类型。 -
-
重新定义自动创建的属性
默认情况下,自动创建的属性(如
jcr:primaryType)不受覆盖/覆盖的约束,以确保当前位于/libs下的节点类型得到遵守。 要实施覆盖/覆盖,您必须在/apps中重新创建节点,明确隐藏属性并重新定义它:-
在
/apps下使用所需的jcr:primaryType创建对应的节点 -
在该节点上创建属性
sling:hideProperties,其值设置为自动创建的属性的值;例如,jcr:primaryType此属性(在
/apps下定义)的优先级将高于/libs下定义的属性
-
-
重新定义节点及其子节点
节点及其子节点在
/libs中定义,但在/apps覆盖/覆盖中需要新配置。-
合并以下各项的操作:
- 隐藏节点的子节点(保留节点的属性)
- 重新定义属性/属性
-
-
隐藏属性
属性在
/libs中定义,但在/apps覆盖/覆盖中不是必需的。-
在
/apps中创建对应的节点 -
创建类型为
String或String[]的属性sling:hideProperties。 使用此选项可指定要隐藏/忽略的属性。 也可以使用通配符。 例如:*["*"]jcr:title["jcr:title", "jcr:description"]
-
-
隐藏节点及其子节点
节点及其子节点在
/libs中定义,但在/apps覆盖/覆盖中不是必需的。-
在/补辫辫蝉下创建对应的节点
-
创建属性
sling:hideResource- 类型:
Boolean - 值:
true
- 类型:
-
-
隐藏节点的子节点(同时保留节点的属性)
在
/libs中定义了节点、其属性及其子节点。/apps覆盖/覆盖中需要节点及其属性,但在/apps覆盖/覆盖中不需要部分或全部子节点。-
在
/apps下创建对应的节点 -
创建属性
sling:hideChildren:- 类型:
String[] - 值:要隐藏/忽略的子节点(如 中的
/libs定义)的列表
通配符 *可用于隐藏/忽略所有子节点。
- 类型:
-
-
对节点重新排序
节点及其同级在
/libs中定义。 需要新位置,以便在/apps覆盖/覆盖中重新创建节点,其中新位置是引用/libs中的相应同级节点定义的。-
使用
sling:orderBefore属性:-
在
/apps下创建对应的节点 -
创建属性
sling:orderBefore:这会指定当前节点应位于之前的节点(如
/libs中所示):- 类型:
String - 值:
<before-SiblingName>
- 类型:
-
-
从您的代码调用厂濒颈苍驳资源合并器 invoking-the-sling-resource-merger-from-your-code
Sling资源合并器包含两个自定义资源提供程序 — 一个用于迭加,另一个用于覆盖。 您可以使用挂载点在代码中调用其中的每项:
/libs复制的结构)。-
覆盖:
-
目的:根据搜索路径合并资源
-
挂载点:
/mnt/overlay -
用法:
mount point + relative path -
例:
getResource('/mnt/overlay' + '<relative-path-to-resource>');
-
-
覆盖:
-
用途:根据资源的超级类型合并资源
-
装入点:
/mnt/overide -
用法:
mount point + absolute path -
示例:
getResource('/mnt/override' + '<absolute-path-to-resource>');
-
使用示例 example-of-usage
下面介绍一些示例: