Gößenangaben von Download-Links im RTE
Armin Bartsch, Donnerstag, 19. März 2009
Zeigt die Dateigröße bei RTE-Links mit an
Nicht immer möchte man Links zu einem Download als Dateiliste oder mit Hilfe einer Extension darstellen, sondern direkt im Text aber auf die Angabe der Dateigröße nicht verzichten.
Mit einigen Zeilen TypoScript und einer USER-Funktion kann man die Links erweitern damit die Dateigröße vom Besucher vor dem Download zu erkennen ist.
TypoScript
In diesem Beispiel greife ich direkt auf die zu um den Link um die Größenangabe zu erweitern.
# Einbinden der PHP-Datei, bitte Pfad anpassen
page.includeLibs.user_classes = typo3conf/ext/anpassungen_t3/user_classes.php
lib.parseFunc_RTE {
tags {
link {
innerWrap.cObject = COA
innerWrap.cObject {
10 = TEXT
10.value = |
20 = USER_INT
20.userFunc = user_classes->fileSize
20.wrap = <span class=filesize>(|)</span>
20.tilo.cObject = TEXT
20.tilo.cObject {
data = parameters : allParams
split {
token.char = 32
cObjNum = 1 |*| 2 |*| 2
1 {
current = 1
}
}
}
if.value = t3x,t3d,pdf,zip,rar,doc,wmv
if.isInList.cObject < .20.tilo.cObject
if.isInList.cObject {
split {
1 {
crop = -3
case = lower
}
}
}
}
}
}
}# Einbinden der PHP-Datei, bitte Pfad anpassen
page.
includeLibs.user_classes = typo3conf/ext/anpassungen_t3/user_classes.php
lib.parseFunc_RTE {
link {
innerWrap.cObject {
10.value = |
20.wrap = <span class=filesize>(|)</span>
20.tilo.cObject {
data = parameters : allParams
token.char = 32
cObjNum = 1 |*| 2 |*| 2
1 {
current = 1
}
}
}
if.
value = t3x,t3d,pdf,zip,rar,doc,wmv
if.isInList.
cObject < .
20.tilo.
cObject
1 {
crop = -3
case = lower
}
}
}
}
}
}
}
In Zeile 2 wird über die PHP-Datei eingebunden deren Funktion die Größe der Datei zurückgibt. Der Aufruf der Funktion erfolgt im TypoScript mit der Zeile 12.
Damit die Größenangabe mit im Linktext (a-tag) geschrieben wird, greife ich auf innerWrap zurück, gleichzeitig stehen somit stdWrap/cObjecte zur Verfügung.
Der Dateiname samt Pfad wird mit Hilfe von den Zeilen 17-23 aus dem extrahiert und an die Funktion user_classes->fileSize übergeben.
In den Zeilen 24-35 erfolgt per if eine Abfrage für welche Extensionen (Dateiendungen) eine Größenangabe ermittelt werden soll.
Die Zeile 25 kann beliebig angepasst und erweitert werden.
USER Klasse
Die mit TypoScript eingebunden USER-Klasse benötigt nur einige Zeilen Code.
<?php
class user_classes {
var $cObj;
/**
* Rückgabe der Dateigröße, genutzt für LINK
*
* @param string Leer
* @param array TypoScript configuration
* @return string HTML output.
*/
function fileSize($content, $conf) {
$file = $this->cObj->TEXT($conf['tilo.']);
if (file_exists($file)) {
$fileSize = filesize($file);
if ($fileSize) {
$fileSize = t3lib_div::formatSize($fileSize, ' Byte| kB| MB| GB');
$fileSize = $conf['wrap'] ? $this->cObj->wrap($fileSize, $conf['wrap']) : $fileSize;
}
}
return $fileSize;
}
}
?><?php
class user_classes {
var $cObj;
/**
* Rückgabe der Dateigröße, genutzt für LINK
*
* @param string Leer
* @param array TypoScript configuration
* @return string HTML output.
*/
$file = $this->cObj->TEXT($conf['tilo.']);
if ($fileSize) {
$fileSize = t3lib_div::formatSize($fileSize, ' Byte| kB| MB| GB');
$fileSize = $conf['wrap'] ? $this->cObj->wrap($fileSize, $conf['wrap']) : $fileSize;
}
}
return $fileSize;
}
}
?>
Die Methode ermittelt die Dateigröße und gibt diese mit einer Einheit zurück.