2014-09-05 3 views
3

У меня есть вопрос, связанный с использованием Sightly для доступа к дочерним узлам компонента. У меня есть шаблон, который тянет в базовый компонент изображения, используя ресурс sly-resource, например.AEM 6.0 Зрелые дочерние узлы

<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 из моего шаблона, рассматривая его как дочерний узел.

Спасибо, Гарри

+0

Я не уверен, если это возможно, но вы могли бы реализовать эту проверку внутри класса Java и ссылаться на него данные хитрого -использование. – Thomas

+0

См. Также этот новый вопрос: http://stackoverflow.com/questions/33418480/how-do-i-access-the-properties-of-a-data-sly-list-item-in-sightly –

ответ

5

В AEM6, не представляется возможным получить доступ дочерних узлов и их свойства непосредственно из шаблона без красивый подготовки данных в Use-API.

Это один из способов, как вы можете подготовить эти данные, поэтому в вашем компоненте 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 расслоения, то вы, очевидно, изменить имя пакета, и в шаблоне, чтобы вызвать этот класс, вы» d, то должны обеспечить полное имя пакета: <h1 data-sly-use.logic="com.PATH.TO.YOUR.PACKAGE.Logic">

Надежда, что помогает, Габриэль

3

Поскольку по крайней мере AEM 6,1 (Sling API обвалования le 2.7.0) существует метод getValueMap() в API Sling Resource. Таким образом, теперь вы можете просто использовать:

${resource.valueMap.fileReference} 

Смотрите также этот новый вопрос: How do I access the properties of a data-sly-list item in Sightly?