AEM:是否有可能测试parsys是否有内容而不扩展parsys?

时间:2015-06-11 17:36:01

标签: aem sightly

是否可以测试一个parsys是否有内容而不扩展并创建自定义版本的parsys?也接受链接到一些文档到parsys属性。

我有一个我需要删除的解析,如果它是空的,因为应用于解析的一些类正在影响布局。

2 个答案:

答案 0 :(得分:1)

您可以提取parsys的sling资源,然后检查它是否有子项:

boolean isParsysEmpty = !resourceResolver.resolve("/path/to/your/parsys").hasChildren();

请参阅JavaDoc: https://docs.adobe.com/docs/en/aem/6-0/develop/ref/javadoc/org/apache/sling/api/resource/Resource.html#hasChildren%28%29

答案 1 :(得分:1)

您必须使用USE API类。

上面引用的hasChildren()函数不能在js中使用api类(这非常烦人 - 这里是js usp api中可用资源的实现:http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java?revision=1674092&view=markup)。

这是一个使用ResourceUtils.js和q.js进行测试的解决方案,以查看提供的解析是否存在:

悦目:

<div data-sly-use.hasChildren="${'hasChildren.js' @ parsys='MainContent', page=currentPage}" data-sly-unwrap>
  <div data-sly-test="${wcmmode.edit || hasChildren}" data-sly-unwrap>
      <div data-sly-resource="${'MainContent' @ resourceType='foundation/components/parsys'}"></div>
  </div>
</div>

hasChildren.js

"use strict";
use(["/libs/wcm/foundation/components/utils/ResourceUtils.js", "/libs/sightly/js/3rd-party/q.js"], function (ResourceUtils, Q) {

    var childPromise = Q.defer();

    if(this.page.getContentResource(this.parsys) != null) {
        ResourceUtils.getResource(this.page.getContentResource(this.parsys).getPath()).then(function(res) { 
            res.getChildren().then(function (childItems) {
                return childPromise.resolve(childItems.length > 0);
            }, function (error) {
            });
        }, function (error) {
        });
        return childPromise.promise;
    }
});