2015-05-20 2 views
1

В AEM содержимое, такое как страницы и изображения, содержит префикс '/content/'. Мы можем переписать этот URL-адрес через Link Checker Transformer и resourceResolver.map() метод. URL-адреса переписываются для элементов HTML <a> и <form>.Переписать атрибут Adobe CQ Image src

Но я хочу, чтобы он работал для <img> элементов.

Я попытался в том числе <img> элементов в конфигурации Link Checker Transformer, добавив его в списке «Переписать элементы», как img:src:

enter image description here

Я также проверил ответы от What am I missing for this CQ5/AEM URL rewriting scenario? но обе попытки не помогли решить эту проблему.

Есть ли способ сделать это?

+0

у вас настроен Rewriter в/приложений/XXX/Config/Rewriter? – santiagozky

+0

@santiagozky к сожалению нет. я буду читать, как настроить переписывающий через это. – khakiout

+0

@santiagozky Я пробовал, но ничего не происходит с '' elements – khakiout

ответ

2

Даже если rewriter и Link Checker Transformer не работал. Я использовал собственный LinkRewriter, используя интерфейсы Transformer и TransformerFactory. Я основывался на образце от Adobe для моего кода. Я разработал что-то вроде этого:

@Component(
    metatype = true, 
    label = "Image Link Rewriter", 
    description = "Maps the <img> elements src attributes" 
) 
@Service(value = TransformerFactory.class) 
@Property(value = "global", propertyPrivate = true) 
public class ImageLinkRewriter implements Transformer, TransformerFactory { 

    // some variables 

    public CustomLinkTransformer() { } 

    @Override 
    public void init(ProcessingContext context, 
        ProcessingComponentConfiguration config) throws IOException { 
     // initializations here 
    } 

    @Override 
    public final Transformer createTransformer() { 
     return new CustomLinkTransformer(); 
    } 

    @Override 
    public void startElement(String uri, String localName, 
          String qName, Attributes atts) throws SAXException { 
     if ("img".equalsIgnoreCase(localName)) { 
      contentHandler.startElement(uri, localName, qName, rewriteImageLink(atts)); 
     } 
    } 

    private Attributes rewriteImageLink(Attributes attrs) { 
     String attrName = "src"; 
     AttributesImpl result = new AttributesImpl(attrs); 

     String link = attrs.getValue(attrName); 
     String mappedLink = resource.getResourceResolver().map(request, link); 

     result.setValue(result.getIndex(attrName), mappedLink); 

     return result; 
    } 

} 

Надеюсь, что это поможет другим. Вот несколько ссылок:

+1

Для любого, кто приходит сюда: Исходный код в этом ответе немного испорчен. Полный рабочий пример см. В этом сущности, который я создал: https://gist.github.com/anonymous/d2a22bdf0dfc5549b41b825abe65c7a3 –

Смежные вопросы