我想为我们站点上的每个<a>
标签设置目标,但我没有编辑组件,而是编写了一个转换器。如何配置?
我们已经有一个变压器和相应的工厂。该工厂的管道类型为content-fragments
,并根据documentation在配置文件中注册:
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
jcr:primaryType="nt:unstructured"
contentTypes="text/html"
enabled="{Boolean}true"
generatorType="htmlparser"
order="1000"
paths="[/content]"
serializerType="htmlwriter"
transformerTypes="[link-transformer,content-fragments,linkchecker]">
<generator-htmlparser
jcr:primaryType="nt:unstructured"
includeTags="[A]"/>
</jcr:root>
我都尝试为新的转换器赋予相同的管道类型和新的管道类型linktransformer
,并尝试了以下每种组合:
transformerTypes="[link-transformer, content-fragments,linkchecker]"
transformerTypes="[content-fragments,linkchecker]"
该配置在Sling Rewriter Console中处于活动状态:
Configuration content-fragments-rewrite
Name : content-fragments-rewrite
Content Types : [text/html]
Paths : [/content]
Order : 1000
Active : true
Valid : true
Process Error Response : true
Pipeline :
Generator :
htmlparser : {includeTags=[Ljava.lang.String;@23d079e2}
Transformers :
link-transformer
content-fragments
linkchecker
Serializer :
htmlwriter
,但是管道都不会在发布者或作者实例上转换HTML。
这是旧的变压器:
@Component(
property = "pipeline.type=" + ContentFragmentLinkTransformerFactory.PIPELINE_TYPE,
service = TransformerFactory.class
)
public class ContentFragmentLinkTransformerFactory implements TransformerFactory {
public static final String PIPELINE_TYPE = "content-fragments";
@Override
public Transformer createTransformer() {
return new ContentFragmentLinkTransformer();
}
}
和新的:
@Component(
property = "pipeline.type=" + LinkTransformerFactory.PIPELINE_TYPE,
service = TransformerFactory.class
)
public class LinkTransformerFactory implements TransformerFactory {
public static final String PIPELINE_TYPE = "link-transformer";
@Override
public Transformer createTransformer() {
return new LinkTransformer();
}
}
我在createTransforemer()方法和转换器的startElement()方法中都设置了断点,但是在这两个实例上,调试时程序都不会暂停。 我还尝试添加一个Activate方法,在其中放置一个断点,使程序确实确实按预期停止了。
我希望转换器能够转换发布者的HTML。
答案 0 :(得分:1)
我们的问题是,我们有另一个具有更高order
的重写器配置:
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
jcr:primaryType="nt:unstructured"
contentTypes="[text/html]"
enabled="{Boolean}true"
generatorType="htmlparser"
order="1001"
serializerType="htmlwriter"
transformerTypes="[linkchecker,versioned-clientlibs]">
<transformer-mobile
jcr:primaryType="nt:unstructured"
component-optional="{Boolean}true"/>
<transformer-mobiledebug
jcr:primaryType="nt:unstructured"
component-optional="{Boolean}true"/>
<transformer-contentsync
jcr:primaryType="nt:unstructured"
component-optional="{Boolean}true"/>
</jcr:root>
快速解决方案是将这两个配置合并为一个:
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
jcr:primaryType="nt:unstructured"
contentTypes="text/html"
enabled="{Boolean}true"
generatorType="htmlparser"
order="1010"
paths="[/content]"
serializerType="htmlwriter"
transformerTypes="[linkchecker,link-transformer,versioned-clientlibs]">
<transformer-mobile
jcr:primaryType="nt:unstructured"
component-optional="{Boolean}true"/>
<transformer-mobiledebug
jcr:primaryType="nt:unstructured"
component-optional="{Boolean}true"/>
<transformer-contentsync
jcr:primaryType="nt:unstructured"
component-optional="{Boolean}true"/>
<generator-htmlparser
jcr:primaryType="nt:unstructured"
includeTags="[A,LINK,SCRIPT]"/>
</jcr:root>
此外,我在转换器中添加了一个检查以仅转换<a>
标签。