调试多媒体选择器umbraco xslt宏

时间:2015-03-29 09:13:09

标签: xslt umbraco umbraco7

使用Umbraco 7.2,我有一个文档类型' ResourcePage'它拥有一个名为' folderlist'的多媒体选择器属性。我已经放置了一个名为' DisplayResourceItem'的xslt宏。在一个名为' resourcecontent'的richtext编辑器属性中。 宏采用名为' resourceNodeId'的内容选择器参数,当我添加宏时,该参数附加在每个ResourcePage中。

我的ResourcePage模板引用了richtext编辑器内容,如:

<umbraco:Item field='resourcecontent' runat='server'></umbraco:Item>

https://our.umbraco.org/forum和本网站上的大量示例之后,我尝试列出文件夹列表中的多个媒体选择器中的文件。出于某种原因,我最好的尝试只给我一个字符串 - 一个逗号分隔的媒体nodeID列表。

相关代码:

<xsl:param name="currentPage"/> 
<xsl:variable name="resourceNodeId" select="/macro/resourceNodeId"/>

<xsl:template match="/">
<xsl:if test="count($resourceNodeId) &gt; 0">
    <xsl:variable name="contentfolder" select="$currentPage/folderlist"/>
    <xsl:value-of select="$contentfolder"/>
</xsl:if>

返回页面上的列表&#34; 1104,1106,1111,1079,1114&#34; (它们是文件夹列表中媒体的所有nodeID),但我尝试使用GetMedia的任何一个都会返回xslt错误。

示例:

<xsl:value-of select="umbraco.library:GetMedia($contentfolder, true())"/>

返回&#34;解析XSLT文件时出错:\ xslt \ displayResourceItems.xslt&#34;

我稍后会返回并显示我之前尝试显示文件(这些文件在引用根媒体节点时起作用,然后检查Media文件夹是否与ResourcePage名称相同,哪个有效 - 但我不知道&#39;我希望管理员必须在媒体文件夹中上传并确保“内容”部分中有相应的文件夹。)

有没有人有任何想法? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

你可以通过分割和for-each这样的东西循环播放媒体ID:

contentfolder是一个字符串,其值为“1104,1106,1111,1079,1114”多媒体选择器的输出

<xsl:variable name="linkidlijst1" select="$contentfolder" />
<ul class="img-list">

  <xsl:variable name="nodeIds" select="umbraco.library:Split($linkidlijst1, ',')" />
  <xsl:for-each select="$nodeIds/value">
    <li>
      <xsl:variable name="medianummer" select="." />
      <xsl:if test="$medianummer != ''">
        <xsl:variable name="media" select="umbraco.library:GetMedia($medianummer, 'false')" />
        <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" />
          <xsl:variable name="alt" select="umbraco.library:GetMedia($medianummer, 'false')/@nodeName" />
          <xsl:if test="$url != ''">
            <img src="{$url}" alt="{$alt}" width="{$width}" height="{$height}" />
          </xsl:if>
        </xsl:if>
      </xsl:if>
    </li>
  </xsl:for-each>
</ul>

但是你为什么要在Umbraco 7.2中使用xslt。 Xslt已经过时了。最好在Umbraco 7中使用Razor。