gpt4 book ai didi

adobe - AEM 6.0 Sightly 子节点

转载 作者:行者123 更新时间:2023-12-01 09:25:25 25 4
gpt4 key购买 nike

我有一个关于使用 Sightly 访问组件的子节点的问题。我有一个模板,它使用 data-sly-resource 引入一个基本的图像组件,就像这样。

<div class="${wcmmode.edit ? 'image-edit image' : 'image'}" data-sly-resource="${ 'heroImage' @ resourceType='/libs/foundation/components/image', appendPath='image', selectors='fileReference' }"> </div>

我想做的是根据该图像组件是否实际具有图像集来更改 css 类。为此,我的计划是访问图像组件节点并读取其文件引用。沿线的东西
<h1>${ properties["heroImage"] }</h1>

不幸的是,这不起作用。我的问题是如何从我的模板访问 heroImage 资源的 fileReference,将其视为子节点。

谢谢,
哈利

最佳答案

在 AEM6 中,如果不准备 Use-API 中的数据,则无法直接从 Sightly 模板访问子节点及其属性。

这是您准备数据的一种方式,因此在您的 CQ 组件中,您通常会拥有类似以下两个文件的内容。

<!-- template.html -->
<h1 data-sly-use.logic="Logic">
${logic.heroImage.fileReference}
</h1>


<!-- Logic.java -->
package apps.PATH.TO.YOUR.COMPONENT.FOLDER;

import com.adobe.cq.sightly.WCMUse;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ValueMap;

public class Logic extends WCMUse {
private static final String CHILD_NODE = "heroImage";
private ValueMap childProperties;

@Override
public void activate() throws Exception {
Resource childResource = getResource().getChild(CHILD_NODE);
childProperties = childResource.adaptTo(ValueMap.class);
}

public ValueMap getHeroImage() {
return childProperties;
}
}

您也可以将 Logic.java 文件移动到一个 OSGi 包中,然后您显然会更改包名称,然后在模板中调用该类,您必须提供完全限定的包名称: <h1 data-sly-use.logic="com.PATH.TO.YOUR.PACKAGE.Logic">
希望有所帮助,
加布里埃尔

关于adobe - AEM 6.0 Sightly 子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25689443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com