0

在论坛上使用 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 测试,但现在如果我将 $currentPage/image 替换为 1663,它会给我另一个错误: 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 &gt; 0">
        <xsl:value-of select="$atest" />
    </xsl:if>
</xsl:variable>

编辑2------------

在下面尝试这个总是得到错误: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>
4

2 回答 2

0

谢谢你的帮助。找到了我的问题解决方案。因为我的形象不是强制性的(是的,我之前应该告诉过)。我只是这样做了:

<xsl:if test="$currentPage/image &gt; 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>

现在它工作正常。谢谢您的帮助。祝你有美好的一天。本杰明

于 2013-05-30T02:40:35.527 回答
0

在调用 umbraco.Library:GetMedia() 函数之前,您需要检查您的 $currentPage/image 是否 > 0。我不记得为什么会这样,但几年前我遇到过同样的问题,如果我没记错的话,这样做是有原因的。

尝试这个:

<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>
于 2013-05-29T12:40:39.667 回答