Получить размер файла из папки мультимедиа в Umbraco с помощью XSLT - PullRequest
2 голосов
/ 29 января 2012

Ниже приведена часть моего 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>

Ответы [ 2 ]

1 голос
/ 29 января 2012

Мне удалось разобраться.

Я удалил переменную обтекания и создал переменную с именем 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>
1 голос
/ 29 января 2012

Проблема (я думаю) заключается в том, что поскольку вы не добавляли атрибут $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>
...