【问题标题】:How to get all the assets in a Collection in AEM?如何在 AEM 中获取集合中的所有资产?
【发布时间】:2019-09-04 20:57:23
【问题描述】:

在给定集合路径的情况下,我正在尝试获取 AEM 中集合中的所有资产。

假设集合的路径是 /content/dam/collections/public/-/-XZMzZlhkJKIa7-Mg15h/testing

我需要获取此集合中的所有资产。

我在 content/dam/collections 下检查了资产未存储在此位置下

我什至尝试在 AEM 的查询生成器中编写查询,给出 type:dam:asset 和路径:“集合的位置”

我没有得到任何结果。

我只需要在Java或QueryBuilder中获取集合下的所有资产

【问题讨论】:

    标签: java aem query-builder


    【解决方案1】:

    将资产存储在集合中不是一个好主意,因为资产可以是多个集合的一部分。就像在播放列表中一样,资产仅在集合中被引用。

    每个集合都有一个子节点“sling:members”。该子节点有一个(多值)属性 sling:resources ,它保存对作为该集合成员的每个资产的引用。 最重要的是,sling:members 还具有类型为 nt:unstructured 的每个资产的子节点,每个资产具有属性 sling:resource 和资产的路径。

    因此,您可以迭代属性值或子节点以获取对资产的引用,然后在其原始位置访问它们。

    HTH

    【讨论】:

      【解决方案2】:

      资源集合 API 将用于检索集合中的资产。

      下面的代码应该适合你。

      Resource resource = resourceResolver
                  .getResource("/content/dam/collections/k/kXjI0j44sW4pq2mWc9fE/public collections");
          if (null != resource) {
              log.debug("resource path is {}", resource.getPath());
              ResourceCollection resourceCollection = resource.adaptTo(ResourceCollection.class);
              if (null != resourceCollection) {
                  Iterator<Resource> resourceIterator = resourceCollection.getResources();
                  while (resourceIterator.hasNext()) {
                      Resource damResource = resourceIterator.next();
                      log.debug("damResource path is {}", damResource.getPath());
                      imagePaths.add(damResource.getPath());
                  }
              }
          }
      

      有关模型类和示例组件,请参阅以下链接

      https://github.com/sudheerdvn/aem-flash/blob/develop/core/src/main/java/com/flash/aem/core/models/ReadCollectionAssets.java

      https://github.com/sudheerdvn/aem-flash/tree/develop/ui.apps/src/main/content/jcr_root/apps/aem-flash/components/content/read-collection-assets

      【讨论】:

      • 在给定集合路径的情况下,我能否在 Querbuilder 中获取查询以获取集合中资产的所有路径?
      • @acus - 您甚至不需要查询 - 所有引用都存储在一个多值字段中。看我的回答。
      • 所有资产都存储在 sling:members 属性中。节点也是在同一个节点下创建的,你也可以使用这样的查询。 path=/content/dam/collections/k/kXjI0j44sW4pq2mWc9fE/public collections/sling:members type=nt:unstructured p.limit=-1 但是,最好直接读取属性,因为查询又是一种开销。
      • 使用com.day.cq.dam.api.collection.SmartCollection api 代替sling ResourceCollection,它提供了getQuery 方法,还修改了getResources 以在适用时通过执行查询来获取资产。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-02
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 2017-07-05
      • 1970-01-01
      • 2021-06-29
      相关资源
      最近更新 更多