[TYPO3-german] Viehelper für Ausgabe der Endung einer Datei

bernd wilke t3ng at bernd-wilke.net
Tue Nov 4 17:24:29 CET 2014


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


More information about the TYPO3-german mailing list