Am 04.11.14 16:42, schrieb Philipp Holdener:
Hallo zusammen

Ich hab hier ein DCE für einen Downloadbereich.
Da gebe ich mit einem VHS Viewhelper bereits die Grösse der Datei an.
Gerne würde ich auch die Dateiendung irgendwie ausgeben lassen.


Mein fluid sieht bis jetzt so aus


<ul>
             <f:for each="{field.download}" as="download">

                 <v:var.set name="downloadFileInMb">
                     <v:math.round decimals="2">
                          <v:math.division b="1048576">

{dce:typolinkUrl(parameter:'{download.datei}') ->
v:format.trim(characters: '/') -> v:media.size()}
                         </v:math.division>
                     </v:math.round>
                 </v:var.set>



                 <li>
                     <a
href="{dce:typolinkUrl(parameter:'{download.datei}')}" target="_blank"
title="{download.dateiTitel}">{download.name}</a>
                     <div class="img-box">
                         <img
src="/fileadmin/templates/images/{download.typ}.png" alt="#" />
                         <span>{downloadFileInMb ->
v:format.trim()}MB</span>
                     </div>
                 </li>

             </f:for>
         </ul>





Der Viewhelper zur Ausgabe des Dateityps wäre wohl


     Tag usage example

     <v:media.extension file="NULL">
         <!-- tag content - may be ignored! -->
     </v:media.extension>

     Inline usage example

     {v:media.extension(file: 'NULL')}




Doch wie benutze ich jetzt das?

{v:media.extension(file: '{download.datei}')}

geht nicht.


<v:media.extension file="{download.datei}">
                             {download.datei}
                         </v:media.extension>


Gibt auch nichts aus.


Hat mir jemand einen Tipp?


Besten Dank

Gruss
Philipp

das erinnert mich an was [1].
das habe ich aber nicht per fluid gelöst, sondern nacktes Typoscript


in typoscript ist die Größenberechnung für Dateien nämlich sehr viel einfacher:

für den f:cObject-Viewhelper:
lib.filesize = TEXT
lib.filesize {
  current = 1
  bytes = 1
  bytes.labels = " Bytes| KB| MB| GB"
}

und die datei-Extension habe ich relativ hardcoded entfernt (ich hatte ja auch nur Dateien mit genau dreistelligen Erweiterungen ausgewählt).

genauso könnte man sie natürlich auch extrahieren:

lib.fileExtension = TEXT
lib.fileExtension {
  current = 1
  orderedStdWrap {
    # nur Dateiendung:
    10.substring = -3,255
    20.case = upper
  }
}

natürlich könnte man das auch ganz dynamisch lösen.
dazu nimmt man ein split an Punkten und nimmt nur das letzte Element
(ungetestet)

lib.fileExtension = TEXT
lib.fileExtension {
  current = 1
  split {
    token = .
    cObjNum = 1 |*| 1 |*| 2
    2 {
      current = 1
      case = upper
    }
  }
}

Falls man schon irgendwo eigene Viewhelper definiert hat ist allerdings auch ein eigener Viewhelper nicht so kompliziert:

class Tx_MyVh_ViewHelpers_File_ExtensionViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper {

        /**
         * Returns name component of path without extension
         *
         * @param string $data given path
         *
         * @return string trailing name.
         */
        public function render( $data = NULL ) {
                if( $data === null ) {
                        $data = $this->renderChildren();
                        if( $data === null ) {
                                return '';
                        }
                }
        $path_parts = pathinfo( $data );
        return $path_parts['extension'];
        }
}




[1] http://pi-phi.de/343.html

bernd
--
http://www.pi-phi.de/cheatsheet.html
_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

Antwort per Email an