下面是我的Umbraco xslt的一部分,我输出PDF文件链接和文件大小。我遇到的问题是,目标是媒体文件的size属性。 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>
答案 0 :(得分:1)
问题(我认为)是因为你没有在任何目标前加上$size
变量select属性,所以默认情况下它使用$currentPage
或循环迭代中的当前值。 / p>
尝试将GetMedia
语句分配给变量,然后从中获取数据。您的代码似乎在不同版本的Umbraco中使用了语法,因此我无法确定您使用的是哪一个。不同版本的Umbraco使用不同的底层XML结构。
如果使用&lt; 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>
如果使用&gt; = 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>
答案 1 :(得分:1)
我设法解决了这个问题。
我删除了包装变量并创建了一个名为size
的变量,用于选择别名UmbracoBytes
(文件大小)
然后我通过choose函数传递变量,这将输出正确的大小扩展名。
感谢您提出的所有建议,我非常感谢!
<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>