下面是我的Umbraco xslt的一部分,我在其中输出PDF文件链接和文件大小。我遇到的问题是针对媒体文件的大小属性。size属性的别名为umbracoBytes。
我只是似乎没能针对这个。
所以我现在输出的只是打开PDF的链接,而不是文件大小。
任何能提供帮助的人都将不胜感激。谢谢
<td>
<xsl:if test="document= ''">
<xsl:value-of select="@nodeName"/>
</xsl:if>
<xsl:if test="document != ''">
<a target="_blank">
<xsl:attribute name="href">
<xsl:value-of select="umbraco.library:GetMedia(document, 'false')/umbracoFile"/>
</xsl:attribute>
<xsl:value-of select="@nodeName"/>
<xsl:variable name="size" select="data [@alias = 'umbracoBytes']" />
<xsl:variable name="sizeAndSuffix">
<xsl:choose>
<xsl:when test="$size >= 1073741824">
<xsl:value-of select="format-number($size div 1073741824,'#,###')"/>
<xsl:text>GB</xsl:text>
</xsl:when>
<xsl:when test="$size >= 1048576">
<xsl:value-of select="format-number($size div 1048576,'#,###')"/>
<xsl:text>MB</xsl:text>
</xsl:when>
<xsl:when test="$size >= 1024">
<xsl:value-of select="format-number($size div 1024,'#,###')"/>
<xsl:text>KB</xsl:text>
</xsl:when>
<xsl:when test="$size > 0 and $size < 1024">
<xsl:value-of select="format-number($size div 0,'#,###')"/>
<xsl:text>Bytes</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>0 Bytes</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
</a>
</xsl:if>
</td>
问题(我认为)在于,因为您没有在$size
变量select属性前面加上任何目标,所以默认情况下,它在循环迭代中使用$currentPage
或当前值。
尝试将GetMedia
语句分配给一个变量,然后从中获取数据。您的代码似乎在不同版本的Umbraco中使用了语法,所以我不太清楚您使用的是哪一个。Umbraco的不同版本使用不同的底层XML结构。
如果使用<Umbraco 4.5.1
<xsl:variable name="myDocument" select="umbraco.library:GetMedia(document, 'false')" />
<a target="_blank">
<xsl:attribute name="href">
<xsl:value-of select="$myDocument/data[@alias='umbracoFile']"/>
</xsl:attribute>
...
<xsl:variable name="size" select="$myDocument/data [@alias = 'umbracoBytes']" />
...
</a>
如果使用>=Umbraco 4.5.1
<xsl:variable name="myDocument" select="umbraco.library:GetMedia(document, 'false')" />
<a target="_blank">
<xsl:attribute name="href">
<xsl:value-of select="$myDocument/umbracoFile"/>
</xsl:attribute>
...
<xsl:variable name="size" select="$myDocument/umbracoBytes" />
...
</a>
我设法解决了这个问题。
我删除了包装变量并创建了一个名为size
的变量,该变量选择别名UmbracoBytes
(文件大小)
然后,我将变量传递给select函数,这将输出正确的大小扩展。
谢谢你的建议,我真的很感激!
<xsl:variable name="size" select="umbraco.library:GetMedia(document, 'false')/umbracoBytes"/>
<xsl:choose>
<xsl:when test="$size >= 1073741824">
<xsl:value-of select="format-number($size div 1073741824,'#,###')"/>
<xsl:text>GB</xsl:text>
</xsl:when>
<xsl:when test="$size >= 1048576">
<xsl:value-of select="format-number($size div 1048576,'#,###')"/>
<xsl:text>MB</xsl:text>
</xsl:when>
<xsl:when test="$size >= 1024">
<xsl:value-of select="format-number($size div 1024,'#,###')"/>
<xsl:text>KB</xsl:text>
</xsl:when>
<xsl:when test="$size > 0 and $size < 1024">
<xsl:value-of select="format-number($size div 0,'#,###')"/>
<xsl:text>Bytes</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>0 Bytes</xsl:text>
</xsl:otherwise>
</xsl:choose>