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



下面是我的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 &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>

问题(我认为)在于,因为您没有在$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 &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>

最新更新