调试多个媒体选择器 umbraco xslt 宏
Debugging multiple media picker umbraco xslt macro
使用 Umbraco 7.2,我有一个文档类型 'ResourcePage',它包含一个名为 'folderlist' 的多媒体选择器 属性。我在名为 'resourcecontent' 的富文本编辑器 属性 中放置了一个名为 'DisplayResourceItem' 的 xslt 宏。
该宏采用一个名为 'resourceNodeId' 的内容选择器参数,当我添加宏时,它附加在每个 ResourcePage 中。
我的 ResourcePage 模板引用了富文本编辑器内容,如:
<umbraco:Item field='resourcecontent' runat='server'></umbraco:Item>
根据 https://our.umbraco.org/forum 和本网站上的一些示例,我试图在文件夹列表多媒体选择器中列出文件。出于某种原因,我最好的尝试只给我一个字符串——媒体节点 ID 的逗号分隔列表。
相关代码:
<xsl:param name="currentPage"/>
<xsl:variable name="resourceNodeId" select="/macro/resourceNodeId"/>
<xsl:template match="/">
<xsl:if test="count($resourceNodeId) > 0">
<xsl:variable name="contentfolder" select="$currentPage/folderlist"/>
<xsl:value-of select="$contentfolder"/>
</xsl:if>
return页面“1104、1106、1111、1079、1114”上的列表(它们是文件夹列表中媒体的所有节点 ID),但我尝试使用 GetMedia return是一个 xslt 错误。
示例:
<xsl:value-of select="umbraco.library:GetMedia($contentfolder, true())"/>
returns "Error parsing XSLT file: \xslt\displayResourceItems.xslt "
稍后我会 return 并展示我之前尝试显示文件的尝试(成功引用根媒体节点,然后检查媒体文件夹是否与 ResourcePage 名称同名,这有效 -但我不希望管理员必须在媒体文件夹中上传并确保内容部分中有相应的文件夹)。
有人有什么想法吗?
提前致谢。
您可以使用拆分和 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>
但是为什么要将 xslt 与 Umbraco 7.2 一起使用。 Xslt 已过时。最好在 Umbraco 7 中使用 Razor。
使用 Umbraco 7.2,我有一个文档类型 'ResourcePage',它包含一个名为 'folderlist' 的多媒体选择器 属性。我在名为 'resourcecontent' 的富文本编辑器 属性 中放置了一个名为 'DisplayResourceItem' 的 xslt 宏。 该宏采用一个名为 'resourceNodeId' 的内容选择器参数,当我添加宏时,它附加在每个 ResourcePage 中。
我的 ResourcePage 模板引用了富文本编辑器内容,如:
<umbraco:Item field='resourcecontent' runat='server'></umbraco:Item>
根据 https://our.umbraco.org/forum 和本网站上的一些示例,我试图在文件夹列表多媒体选择器中列出文件。出于某种原因,我最好的尝试只给我一个字符串——媒体节点 ID 的逗号分隔列表。
相关代码:
<xsl:param name="currentPage"/>
<xsl:variable name="resourceNodeId" select="/macro/resourceNodeId"/>
<xsl:template match="/">
<xsl:if test="count($resourceNodeId) > 0">
<xsl:variable name="contentfolder" select="$currentPage/folderlist"/>
<xsl:value-of select="$contentfolder"/>
</xsl:if>
return页面“1104、1106、1111、1079、1114”上的列表(它们是文件夹列表中媒体的所有节点 ID),但我尝试使用 GetMedia return是一个 xslt 错误。
示例:
<xsl:value-of select="umbraco.library:GetMedia($contentfolder, true())"/>
returns "Error parsing XSLT file: \xslt\displayResourceItems.xslt "
稍后我会 return 并展示我之前尝试显示文件的尝试(成功引用根媒体节点,然后检查媒体文件夹是否与 ResourcePage 名称同名,这有效 -但我不希望管理员必须在媒体文件夹中上传并确保内容部分中有相应的文件夹)。
有人有什么想法吗? 提前致谢。
您可以使用拆分和 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>
但是为什么要将 xslt 与 Umbraco 7.2 一起使用。 Xslt 已过时。最好在 Umbraco 7 中使用 Razor。