2013-05-29 2 views
0

Поиск ошибки с помощью GetMedia на форуме, я читал, что переменная i дает функции не целое.umbraco xslt getMedia error

Вот эта ошибка: 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> 

Спасибо за вашу помощь. Benjamin

Редактировать ------------------

Я пытался добавить, если тест, но теперь это дает мне другую ошибку, если я заменить $ CurrentPage/image by 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> 

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

Вы должны проверить, если ваш $ CurrentPage/изображение> 0 перед вызовом umbraco.Library: функция 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> 

EDIT:

Я запутался с чеком вам необходимо добавить в редактор макросов Umbraco с этим. Rendering изображение должно быть простым, как это:

<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> 
+0

Привет, я попробовал это и теперь сказал мне следующее: System.Xml.Xsl.XslTransformException: Чтобы использовать фрагмент результирующего дерева в выражении пути, сначала преобразуйте его в набор узлов, используя команду msxsl: node- set(). Для получения дополнительной информации см. Часть редактирования в моем сообщении. – Benjamin

+0

Ваш тест неверен, вы изменили порядок своих строк в своем тесте. Попробуйте выполнить точный порядок моего примера. –

+0

Я пробовал ваш пример, но всегда эту ошибку про int32. См. Мое редактирование 2 – Benjamin

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> 

Теперь это просто отлично работает. Благодарим вас за помощь. Отличный день. Benjamin

Смежные вопросы