0

是否可以在不扩展和创建自定义版本的 parsys 的情况下测试 parsys 是否有内容?也接受指向 parsys 属性的一些文档的链接。

我有一个 parsys,如果应用到 parsys 的某些类影响布局,它是空的,我需要删除它。

4

2 回答 2

2

您必须为此使用 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 来测试提供的 parsys 是否存在的解决方案:

轻描淡写:

<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;
    }
});
于 2015-06-15T16:02:24.590 回答
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

于 2015-06-15T08:14:36.240 回答