【问题标题】:Get file size from media folder in Umbraco using XSLT使用 XSLT 从 Umbraco 中的媒体文件夹获取文件大小
【发布时间】:2012-01-30 02:29:42
【问题描述】:

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

【问题讨论】:

  • 您使用的是哪个版本的 Umbraco?
  • 问题是您没有指定源 XML 文档——对于不同的文档,结果会有所不同,没有人可以重现您的结果。此外,提供的代码只是一个片段(甚至不是模板)。请提供完整的(最少首选)源 XML 文档和完整的所需结果,并说明转换必须实现的要求。

标签: xslt umbraco


【解决方案1】:

问题(我认为)是因为您没有在 $size 变量选择属性前添加任何目标,所以默认情况下它使用 $currentPage 或循环迭代中的当前值。

尝试将GetMedia 语句分配给一个变量,然后从中获取数据。您的代码似乎在不同版本的 Umbraco 中使用了语法,所以我不能完全确定您使用的是哪一个。不同版本的 Umbraco 使用不同的底层 XML 结构。

如果使用

<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>

【讨论】:

    【解决方案2】:

    我设法解决了。

    我删除了包装变量并创建了一个名为 size 的变量,它选择别名 UmbracoBytes(文件大小)

    然后我通过选择函数传递变量,这会输出正确的大小扩展。

    感谢您的所有建议,我真的很感激!

       <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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 2018-06-28
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      相关资源
      最近更新 更多