如何使用/理解AEM Sling资源合并、覆盖和覆盖概念

如何使用/理解AEM Sling资源合并、覆盖和覆盖概念,aem,sling,Aem,Sling,我试图理解AEM Sling资源合并的概念。根据AdobeDocs的例子,我对如何使用它感到困惑,任何人都可以用简单的组件来解释,以便更好地理解它。这里是一个解释 覆盖: 当您在AEM中覆盖组件时,意味着将组件从/libs/文件夹复制到/apps/.文件夹。您还可以在/apps/。 根据默认的OSGI首选项,AEM使用搜索路径来查找资源,首先搜索/apps/分支,然后搜索/libs分支,以便在/apps/下新复制的组件获得比/libs/更高的优先级 请注意,我们可以通过从ApacheSling资

我试图理解AEM Sling资源合并的概念。根据AdobeDocs的例子,我对如何使用它感到困惑,任何人都可以用简单的组件来解释,以便更好地理解它。

这里是一个解释

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

根据默认的OSGI首选项,AEM使用搜索路径来查找资源,首先搜索
/apps/
分支,然后搜索
/libs
分支,以便在
/apps/
下新复制的组件获得比
/libs/
更高的优先级

请注意,我们可以通过从ApacheSling资源解析器工厂的配置中更改搜索路径及其优先级顺序

您可以尝试覆盖这些
libs/foundation/components/
list、image、Text&image、Carousel等,。简单的组件,用于切换和更改对话框、jsp级功能以及查看行为。 覆盖组件时,请记住,对于覆盖
/apps/。
组件,如果标题、组件组与
/libs/。
组件相同,则在parsys的设计模式下,两个组件都可以显示在authors sidekick中。启用组件的组件可以在组件周围用括号区分它们
(基础)vs(你的项目)

覆盖: 您还可以通过使用
sling:resourceSuperType
属性来扩展/覆盖组件行为

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

在这里,我们可以将
sling:superResourceType
用于您想要继承功能的任何组件(例如从projectA组件到ProjectB等,而不仅仅限于LIB)。 随着新的Granite Touch用户界面的推出,从AEM 6.0版本开始,覆盖层的使用存在差异,请看

资源合并: 为了理解资源合并捆绑包的概念,请查看。这是一个Sling框架捆绑包(org.apache.Sling.ResourceMerge),它为您提供了在多个其他资源上合并视图的灵活性。确切的合并机制取决于资源选择器实现(即覆盖或覆盖)

通过这种资源合并,可以

  • 从基础资源中删除现有资源/属性
  • 修改基础资源的现有属性/子资源,并
  • 添加新属性/子资源
  • 资源合并提供以下属性以实现上述目标

  • sling:hideProperties(String或String[])--指定要隐藏的属性或属性列表。通配符*隐藏所有属性

  • sling:hideResource(布尔值)——指示是否应完全隐藏资源,包括其子资源

  • sling:hideChildren(String或String[])--包含要隐藏的子节点或子节点列表。节点的属性将被保留。 通配符*隐藏所有内容

  • sling:orderBefore(String)--包含当前节点应位于其前面的同级节点的名称

  • AEM默认安装您将拥有此捆绑包,同样可以通过Felix控制台使用捆绑包符号名org.apache.sling.ResourceMerge

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

  • 确保未在/libs中进行自定义更改
  • 减少从/libs复制的结构
  • 让我们看一个AEM示例来实现或利用它

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

    现在,仅在覆盖组件节点属性上更新
    /apps/下的
    jcr:title
    属性。

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

    让我们再看一个sling资源合并属性的使用示例

    如上图所示,我将站点节点与
    jcr:title
    属性叠加,我添加了
    sling:hideProperties
    ,如下所示。

    现在在TouchUI页面导航中查看站点标题的输出


    类似的方式,您也可以使用其他属性。

    @VAr这让我很好地理解了。谢谢。我可以知道为什么如果我们试图隐藏属性,它不应该完全隐藏以显示,那么会出现空值吗?