在论坛上使用GetMedia搜索错误,我读到我给函数的变量不是整数。
以下是错误:System.OverflowException:对于Int32,值太大或太小。
我检查我的变量:
<xsl:value-of select="$currentPage/image" />
输出结果为:
1663
然后我试试这个:
<xsl:variable name="media" select="umbraco.library:GetMedia($currentPage/image, false())" />
它返回了我上面写的错误。如果我写了1663而不是$ currentPage / image它可以工作但是它是硬编码的并且它不会被硬编码。
这是我的xslt
<xsl:template match="/">
<!-- start writing XSLT -->
<xsl:value-of select="$currentPage/image" />
<xsl:variable name="media" select="umbraco.library:GetMedia($currentPage/image, false())" />
<div class="tfirst">
<p>
<!--xsl:if test="not($media/error)">
<img src="{$media/umbracoFile}" class="left timg" />
</xsl:if-->
<div class="ttext">
<h2><xsl:value-of select="umbraco.library:StripHtml($currentPage/title)" /></h2>
<xsl:value-of select="$currentPage/abstractText" disable-output-escaping="yes" />
</div>
</p>
</div>
<div class="ttext">
<xsl:if test="$currentPage/showMultipleColumns='1'">
<xsl:attribute name="class">showMultipleColumns</xsl:attribute>
</xsl:if>
<xsl:value-of select="$currentPage/bodyText" disable-output-escaping="yes" />
</div>
</xsl:template>
感谢您的帮助。 本杰明
编辑------------------
我尝试添加一个if测试,但现在它给了我另一个错误,如果我用1663替换$ currentPage / image:System.Xml.Xsl.XslTransformException:要在路径表达式中使用结果树片段,首先转换它使用msxsl:node-set()函数到节点集。
如果我让$ currentPage / image总是有:System.OverflowException:对于Int32,值太大或太小。
这是xslt:
<xsl:variable name="atest" select="umbraco.library:GetMedia($currentPage/image, false())" />
<xsl:variable name="media">
<xsl:if test="$currentPage/image > 0">
<xsl:value-of select="$atest" />
</xsl:if>
</xsl:variable>
EDIT2 ------------
尝试以下操作总是会出现错误:System.OverflowException:对于Int32,值太大或太小。
<xsl:variable name="media" select="umbraco.library:GetMedia($currentPage/image, false())" />
<xsl:if test="$media">
<img src="{$media/umbracoFile}" class="left timg" />
</xsl:if>
答案 0 :(得分:0)
您需要检查$ currentPage / image是否为&gt;在调用umbraco.Library之前0:GetMedia()函数。我不记得为什么会这样,但几年前我遇到过同样的问题,如果我没记错的话,就有理由这样做。
试试这个:
<xsl:variable name="mediaId" select="$currentPage/image)" />
<xsl:if test="$mediaId > 0">
<xsl:variable name="media" select="umbraco.library:GetMedia($mediaId, 0)" />
</xsl:if>
编辑:
我对你需要在Umbraco宏编辑器中添加的检查感到困惑。 渲染图像应该像这样简单:
<xsl:variable name="media" select="umbraco.library:GetMedia($currentPage/image, 0)" />
<xsl:if test="$media">
<xsl:variable name="url" select="$media/umbracoFile" />
<xsl:variable name="width" select="$media/umbracoWidth" />
<xsl:variable name="height" select="$media/umbracoHeight" />
<img src="{$url}" width="{$width}" height="{$height}" />
</xsl:if>
答案 1 :(得分:0)
感谢您的帮助。 找到了问题解决方案。 因为我的形象不是强制性的(是的,我之前应该告诉它)。 我刚刚那样做了:
<xsl:if test="$currentPage/image > 0">
<xsl:variable name="media" select="umbraco.library:GetMedia($currentPage/image, false())" />
<xsl:if test="not($media/error)">
<img src="{$media/umbracoFile}" class="left timg" />
</xsl:if>
</xsl:if>
现在它运作正常。 谢谢您的帮助。 祝你有美好的一天。 本杰明