如何 use/understand AEM Sling 资源合并、覆盖和覆盖概念

How to use/understand AEM Sling Resource Merger, override and Overlay concepts

我正在尝试了解 AEM Sling 资源合并概念。根据 Adob​​e 文档示例 Override (Configuring your Page Properties), Overlay (Customizing the Consoles (touch-optimized UI)) 我对如何使用它感到困惑,任何人都可以用简单的组件解释以更好地理解它。

给你一个解释

覆盖: 当您在 AEM 中覆盖组件时,意味着将组件从 /libs/ 文件夹复制到 /apps/.. 文件夹。您可以在 /apps/..

下新复制的组件上强加您自己的定义(如更改标题、组、业务逻辑功能)

根据默认的 OSGI 首选项,AEM 使用搜索路径查找资源,首先搜索 /apps/ 分支,然后搜索 /libs 分支,以便您新复制的组件位于 /apps/ 下优先于 /libs/.

请注意,我们可以修改搜索路径及其优先顺序,方法是从 Felix console Apache Sling Resource Resolver Factory 配置。

您可以尝试叠加这些 libs/foundation/components/ 列表、图像、文本和图像、旋转木马等。可以玩转和更改对话框的简单组件,jsp 级别功能并查看行为。 当你覆盖一个组件时,请记住,这两个组件都可以显示在作者的助手中,对于你的覆盖 /apps/.. 组件,如果标题、componentGroups 与 /libs/.. 组件相同,在 parsys 的设计模式下启用组件可以通过组件周围的括号 (foundation) vs (your project) 来区分它们。

覆盖: 您还可以通过使用 sling:resourceSuperType 属性.

extend/override 组件行为

通过创建所有必要的节点并为该组件设置 sling:superResourceType 属性 的值来手动创建自定义组件将继承 /libs/ 组件的所有功能,即使升级后您仍然继承图像组件的特性。

这里我们可以对任何你想继承功能的组件使用sling:superResourceType(例如从projectA组件到ProjectB等,不仅限于库)。 由于引入了新的 Granite Touch UI,从 AEM 6.0 版本开始,叠加层的使用有所不同,请查看 Adobe Documentation

Sling 资源合并: 查看 Sling Resource Merger 以了解资源合并包的概念。它是一个 Sling 框架包 (org.apache.sling.resourcemerger),让您可以灵活地合并多个其他资源的视图。确切的合并机制取决于资源选择器的实现(即覆盖或覆盖)。

通过这个Sling Resource Merger可以

  1. 从基础资源中删除现有的resource/properties,
  2. 修改底层资源的现有properties/child资源和
  3. 添加新的 properties/child 资源

资源合并提供以下属性实现上述

  1. sling:hideProperties (String or String[]) -- 将 属性 或属性列表指定为 hide.The 通配符 * 隐藏所有。

  2. sling:hideResource (Boolean) -- 表示是否应该完全隐藏资源,包括它的children.

  3. sling:hideChildren (String or String[]) -- 包含 child 节点,或 child 节点列表, 隐藏。节点的属性将被保留。 通配符 * 隐藏所有。

  4. sling:orderBefore (String) -- 包含当前节点应该位于其前面的兄弟节点的名称。

AEM 默认安装您将获得此捆绑包,同样可以从您的 Felix 控制台使用捆绑包符号名称 org.apache.sling.resourcemerger

进行验证

在 AEM 中使用 Sling 资源合并的目标是:

  1. 确保不在 /libs 中进行自定义更改。
  2. 减少从 /libs 复制的结构。

Let’s go to an AEM example to implement or utilize it

目前我要覆盖 /libs/ 下的工具相关节点 jcr:title 值到 /apps

现在更新 jcr:title 属性 单独在 /apps/.. 下的覆盖组件节点 属性 上

像这样,您可以覆盖库中的任何组件,并将所需的功能更改更新到该特定节点

Let's see one more example usage of sling Resource Merger property

如上所示,我还覆盖了站点节点以及 jcr:title 属性 我添加了 sling:hideProperties,如下所示。

现在看看触摸 UI 页面导航中站点标题的输出。

您也可以用类似的方式玩其他属性。 Hope it helps.