叠加

AEM(在此之前,CQ)一直使用叠加原则来扩展和自定义控制台和其他功能(例如,页面创作)。

叠加图是一个可在许多上下文中使用的术语。 在此上下文中(扩展AEM),叠加意味着采用预定义的功能,并将您自己的定义强加在该上下文中(以自定义标准功能)。

在标准实例中,预定义功能保留在/libs下,建议在/apps分支下定义叠加(自定义)。 AEM使用搜索路径来查找资源,首先搜索/apps分支,然后搜索/libs分支(搜索路径可以配置)。 此机制意味着您的叠加(以及在此处定义的自定义)将具有优先级。

自AEM 6.0起,对叠加的实施和使用方式进行了更改:

  • 从AEM 6.0开始 — 适用于Granite相关的叠加(即触屏优化UI)

    • 方法

      • /apps下重建相应的/libs结构。

        这不需要1:1副本,Sling资源合并器用于交叉引用所需的原始定义。 Sling资源合并器通过差异(差异)机制提供访问和合并资源的服务。

      • /apps下进行任何更改。

    • 优势

      • /libs下的更改更加稳健。
      • 只重新定义实际需要的内容。
  • 在AEM 6.0之前的非Granite叠加和叠加

    • 方法

      • 将内容从/libs复制到/apps

        您需要复制整个子分支,包括属性。

      • /apps下进行任何更改。

    • 缺点

      • 虽然在/libs下发生某些更改时,您所做的更改不会丢失,但您可能必须重新创建在/apps下叠加中发生的某些更改。
注意

Sling资源合并器及相关方法只能与Granite一起使用。 这意味着创建具有骨架结构的叠加图仅适用于标准触屏UI。

其他区域(包括经典UI)的叠加涉及复制相应的节点和整个子结构,然后进行所需的更改。

叠加是进行许多更改的推荐方法,例如配置控制台在侧面板中为资产浏览器创建选择类别(在创作页面时使用)。 它们要求为:

  • 不得​在/libs分支​​中进行更改
    您所做的任何更改都可能会丢失,因为当您执行以下操作时,此分支将容易发生更改:

    • 在您的实例中升级
    • 应用修补程序
    • 安装功能包
  • 他们将您所做的更改集中在一个位置;更便于您根据需要跟踪、迁移、备份和/或调试更改。

配置搜索路径

对于叠加图,交付的资源是检索到的资源和属性的聚合,具体取决于可定义的搜索路径:

  • 资源​解析程序搜索路径,在​Apache Sling资源解析程序工厂​的OSGi配置中定义。

    • 搜索路径的自上而下的顺序表示其各自的优先级。
    • 在标准安装中,主要默认值为/apps/libs — 因此,/apps的内容具有比/libs更高的优先级(即​叠加)。
  • 两个服务用户需要对存储脚本的位置进行JCR:READ访问。 这些用户包括:components-search-service(由com.day.cq.wcm.coreto访问/缓存组件使用)和sling-scripting(由org.apache.sling.servlets.resolver用来查找servlet)。

  • 还必须根据脚本的放置位置(在本例中为/etc、/libs或/apps下)配置以下配置。

    PID = org.apache.sling.jcr.resource.internal.JcrResourceResolverFactoryImpl
    resource.resolver.searchpath=["/etc","/apps","/libs"]
    resource.resolver.vanitypath.whitelist=["/etc/","/apps/","/libs/","/content/"]
    
  • 最后,还必须配置Servlet解析程序(在本示例中,还要添加/etc)

    PID = org.apache.sling.servlets.resolver.SlingServletResolver  
    servletresolver.paths=["/bin/","/libs/","/apps/","/etc/","/system/","/index.servlet","/login.servlet","/services/"]
    

用法示例

下面介绍了一些示例:

在此页面上