2011-06-27 70 views
1

我试图输出一个图像已分配给我通过模板呈现。但是,当我尝试通过输出它时,我什么也得不到。Sitecore XSLT渲染问题与图像

以下是我有:

<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呈现出什么。

如何正确显示图像?

+0

请注意''应该读作' – David

回答

1

您有overrideImageItem而不是overrideImage与尝试1.这是故意的吗?

+0

我的坏。复制不正确从XSLT,我简化为帖子使用$ overrideImage没有区别,它得到0输出 – David

0

尝试使用字段属性,而不是通过。

<sc:image field="ImageFieldhere"/> 
+0

问题是图像不在字段中如果作为参数传递给XSLT,因为 – David

0

什么

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

意味着什么?你想做什么?

如果你的目的是为了评估选择属性里面的变量,你应该使用AVT语法:

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

如果你想放置的元素中的变量值,你应该使用XSLT指令xsl:value

<sc:image mw="200" ><xsl:value-of select="$overrideImage"/></sc:image> 
+0

$ overrideImage包含一个对象,当输出到HTML时显示为: '' 我想让这个对象出现一个图像。 AVT语法看起来很正确,但我想我已经尝试过了。我会再检查并确认。 感谢您的帮助,顺便说一句。 – David

+0

所以AVT语法没有产生输出,我只是不明白。 – David

1

所以,我意识到我误解了图像项目传递的内容。当从模板传递图像时,它将作为字符串传递,数据格式为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>