Ошибка при использовании tcmse:PublishBinary в XSLT TBB с XSLT Mediator

Я работаю над XSLT TBB в SDL Tridion 2011 SP1. Я использую посредник XSLT, загруженный с сайта Tridion.

Я создал 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 или шаблоне компонента.

Спасибо.


person Patan    schedule 07.06.2012    source источник


Ответы (2)


Посредник XSLT позволяет добавлять новые методы к объекту XSLT Extension, вы можете найти его в классе «Помощник по шаблону XSLT», доступном в пакете XSLT Mediator.

Чтобы использовать его, вам нужно добавить пространство имен «http://www.sdltridion.com/ps/XSLTHelper» в свой шаблон XSLT, например 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>
person Eric Huiza    schedule 07.06.2012
comment
Спасибо за ответ. Если возможно, вы также можете предоставить код для метода RenderComponentPresentation. Одно маленькое сомнение. Мне нужно добавить упомянутое пространство имен в XSLT TBB только сейчас. - person Patan; 08.06.2012
comment
Да, вам просто нужно добавить упомянутое пространство имен. Обратите внимание, что в моих примерах кода я использую объекты движка, пакета и сеанса, поскольку XSLT Mediator является открытым исходным кодом, вам может потребоваться немного изменить его, чтобы добавить эти свойства в помощник. - person Eric Huiza; 12.06.2012

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>

Затем убедитесь, что вы используете действия завершения по умолчанию или, по крайней мере, TBB «Извлечение двоичных файлов из HTML» и «Опубликовать двоичные файлы в пакете».

(взято с http://yoavniran.wordpress.com/2009/07/11/implementing-the-xslt-mediator-part-1/)

person Nuno Linhares    schedule 07.06.2012