1

我正在研究 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 或组件模板中的任何内容。

谢谢你。

4

2 回答 2

4

tcmse:PublishBinary 不是由 XSLT 介体实现的。这是默认XSLT 模板引擎的功能,而不是中介引擎的功能。

要使用 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/

于 2012-06-07T11:17:01.230 回答
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>
于 2012-06-07T13:33:34.313 回答