Проблемы с рендерингом Sitecore XSLT с изображением - PullRequest
1 голос
/ 27 июня 2011

Я пытаюсь вывести изображение, которое было назначено для моего рендеринга через шаблон. Однако, когда я пытаюсь вывести его через, я ничего не получаю.

Вот что у меня есть:

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:sc="http://www.sitecore.net/sc"
  xmlns:dot="http://www.sitecore.net/dot"
  exclude-result-prefixes="dot sc">

  <!-- output directives -->
  <xsl:output method="xml" indent="no" encoding="UTF-8" omit-xml-declaration="yes" />

  <!-- parameters -->
  <xsl:param name="lang" select="'en'"/>
  <xsl:param name="id" select="''"/>
  <xsl:param name="sc_item"/>
  <xsl:param name="sc_currentitem"/>
  <xsl:param name="overrideImage"/>

  <!-- variables -->
  <xsl:variable name="home" select="$sc_item/ancestor-or-self::item[@template='site root']" />

  <!-- entry point -->
  <xsl:template match="*">
    <xsl:apply-templates select="$sc_item" mode="main"/>
  </xsl:template>

  <!--==============================================================-->
  <!-- main                                                         -->
  <!--==============================================================-->
  <xsl:template match="*" mode="main">
     <p>Attempt 1:
     <xsl:value-of select="$overrideImage"  disable-output-escaping="yes" /></p>
     <p>Attempt 2:
     <sc:image select="$overrideImage" mw="200" /></p>
  </xsl:template>

</xsl:stylesheet>

Итак, попытка 1 завершается (что на самом деле работает, но не соответствует стандартам): & попытка 2 ничего не выдает.

Как правильно отобразить изображение?

Ответы [ 4 ]

1 голос
/ 04 июля 2011

Итак, я понял, что неправильно понял, что передавалось элементом Image.Когда изображение передается из шаблона, оно передается в виде строки с данными в формате XML.Мне пришлось проанализировать строку, чтобы извлечь биты, которые были после, и затем я мог отформатировать ее как XML.

<xsl:variable name="mediaSrc">
  <xsl:value-of select="substring-before(substring-after($overrideImage, 'src=&quot;'), '&quot;')"/>
</xsl:variable>
<xsl:variable name="mediaAlt">
  <xsl:value-of select="substring-before(substring-after($overrideImage, 'alt=&quot;'), '&quot;')"/>
</xsl:variable>
<img>
  <xsl:attribute name="src">
    <xsl:value-of select="concat($mediaSrc, '?mw=200')"/>
  </xsl:attribute>
  <xsl:if test="($mediaAlt !='')">
    <xsl:attribute name="alt">
      <xsl:value-of select="$mediaAlt"/>
    </xsl:attribute>
  </xsl:if>
</img>
1 голос
/ 27 июня 2011

У вас есть overrideImageItem вместо overrideImage, как при попытке 1. Это специально?

0 голосов
/ 28 июня 2011

Что

<sc:image select="$overrideImage" mw="200" ></sc:image>

значит? Что ты пытаешься сделать?

Если вы хотите оценить переменную внутри атрибута select, вам следует использовать синтаксис AVT:

<sc:image select="{$overrideImage}" mw="200" ></sc:image>

Если вы хотите поместить значение переменной внутри элемента, вы должны использовать инструкцию XSLT xsl:value:

<sc:image mw="200" ><xsl:value-of select="$overrideImage"/></sc:image>
0 голосов
/ 28 июня 2011

Попробуйте вместо этого использовать атрибут поля, если вам это удастся.

<sc:image field="ImageFieldhere"/>
...