4

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 にアクセスして、それを子ノードと見なすにはどうすればよいかということです。

ありがとう、ハリー

4

2 に答える 2

5

AEM6 では、Use-API でデータを準備せずに、子ノードとそのプロパティに Sightly テンプレートから直接アクセスすることはできません。

これは、そのデータを準備する方法の 1 つであるため、CQ コンポーネントには通常、次の 2 つのファイルのようなものがあります。

<!-- 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">

お役に立てば幸いです、ガブリエル

于 2014-12-01T12:04:04.790 に答える