1

私はSDLTridion2011SP1でXSLTTBBに取り組んでいます。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オブジェクトに新しいメソッドを追加できます。これは、XSLTMediatorパッケージで利用可能な「XSLTTemplateHelper」クラスにあります。

これを使用するには、xmlns:ext="http://www.sdltridion.com/ps/XSLTHelperのようなXSLTテンプレートに"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 に答える