使用XSLT从Umbraco中的媒体文件夹获取文件大小

时间:2012-01-29 10:54:53

标签: xslt umbraco

下面是我的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 &gt;= 1073741824">
                              <xsl:value-of select="format-number($size div 1073741824,'#,###')"/>
                              <xsl:text>GB</xsl:text>
                      </xsl:when>
                      <xsl:when test="$size &gt;= 1048576">
                              <xsl:value-of select="format-number($size div 1048576,'#,###')"/>
                              <xsl:text>MB</xsl:text>
                      </xsl:when>
                      <xsl:when test="$size &gt;= 1024">
                              <xsl:value-of select="format-number($size div 1024,'#,###')"/>
                              <xsl:text>KB</xsl:text>
                      </xsl:when>
                      <xsl:when test="$size &gt; 0 and $size &lt; 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>

2 个答案:

答案 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 &gt;= 1073741824">
                          <xsl:value-of select="format-number($size div 1073741824,'#,###')"/>
                          <xsl:text>GB</xsl:text>
                  </xsl:when>
                  <xsl:when test="$size &gt;= 1048576">
                          <xsl:value-of select="format-number($size div 1048576,'#,###')"/>
                          <xsl:text>MB</xsl:text>
                  </xsl:when>
                  <xsl:when test="$size &gt;= 1024">
                          <xsl:value-of select="format-number($size div 1024,'#,###')"/>
                          <xsl:text>KB</xsl:text>
                  </xsl:when>
                  <xsl:when test="$size &gt; 0 and $size &lt; 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>