我正在使用SDL Tridion 2011 SP1中的XSLT TBB。我正在使用从Tridion站点下载的XSLT中介。
我创建了一个TBB来检索图像,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:simple="uuid:c5e80ef4-9afd-421a-9205-d5af4c9f2c5c"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:tcm="http://www.tridion.com/ContentManager/5.0"
xmlns:tcmse=”http://www.tridion.com/ContentManager/5.1/TcmScriptAssistant”
exclude-result-prefixes="msxsl simple">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
<xsl:template match="/">
<xsl:element name="p">
<xsl:apply-templates select="tcm:Component/tcm:Data/tcm:Content/simple:Content"/>
</xsl:element>
</xsl:template>
<xsl:template match="simple:Content">
<xsl:element name="img">
<xsl:attribute name="src">
<xsl:value-of select="tcmse:PublishBinary(string(simple:photo/@xlink:href)))"/>
</xsl:attribute>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
我收到错误
[CDATA[Unable to retrieve rendered data from Component Presentation.]]>
</tcm:Line>
<tcm:Line ErrorCode="80040000" Cause="true">
<![CDATA[
Cannot find a script or an extension object associated with namespace
'http://www.tridion.com/ContentManager/5.1/TcmScriptAssistant'.]]
我明白这个问题是由于 'http://www.tridion.com/ContentManager/5.1/TcmScriptAssistant'。
任何人都可以提出克服它所需的修改吗?
我是否需要更改TBB或组件模板中的任何内容。
谢谢。
答案 0 :(得分:4)
tcmse:XSLT Mediator未实现PublishBinary。这是默认 XSLT模板引擎的功能,而不是Mediator引擎。
要使用XSLT Mediator发布二进制文件,您可以执行以下操作:
<xsl:element name="img">
<xsl:attribute name="src">
<xsl:value-of select="simple:image/@xlink:href"/>
</xsl:attribute>
</xsl:element>
然后确保使用默认完成操作,或者至少使用“从HTML中提取二进制文件”和“在包中发布二进制文件”TBB
(摘自http://yoavniran.wordpress.com/2009/07/11/implementing-the-xslt-mediator-part-1/)
答案 1 :(得分:3)
XSLT Mediator允许您向XSLT Extension对象添加新方法,您可以在XSLT Mediator包中提供的“XSLT Template Helper”类中找到它。
为了使用它,您需要在XSLT模板中添加“http://www.sdltridion.com/ps/XSLTHelper”命名空间,如xmlns:ext =“http://www.sdltridion.com/ PS / XSLTHelper”。
下面显示了PublishBinary方法的示例。
public string PublishBinary(string tcmUri)
{
Component mComponent = new Component(new TcmUri(tcmUri), session);
Binary binary = engine.PublishingContext.RenderedItem.AddBinary(mComponent);
return binary.Url;
}
public string PublishBinary(string tcmUri, string sgTcmUri)
{
Component mComponent = new Component(new TcmUri(tcmUri), session);
StructureGroup sg = new StructureGroup(new TcmUri(sgTcmUri), session);
Binary binary = engine.PublishingContext.RenderedItem.AddBinary(mComponent,sg);
return binary.Url;
}
你可以使用这样的方法。
<xsl:element name="img">
<xsl:attribute name="src">
<xsl:value-of select="ext:PublishBinary(string(@xlink:href))" />
</xsl:attribute>
</xsl:element>