29.11.2010

Dateien in /fileadmin/ refenzieren und nicht nach /uploads/ kopieren

Standardmäßig legt TYPO3 von allen Dateien in /fileadmin/ bei jeder Benutzung Kopien in /uploads/ an.
Wenn große Dateien wie z.B. Videos benutzt werden, möchten Sie vielleicht lieber direkt auf die Originaldatei zugreifen.

Dafür gibt es seit TYPO3 4.3 den Feldtyp filereference.

Im Unterschied zum Feldtyp file, wo jeweils eine Kopie der benutzten Datei angelegt wird, greift filereference direkt auf die Originaldatei zu.

filereference speichert den kompletten Pfad einschließlich Datei:

fileadmin/downloads.manual.pdf

tca.php der Extension

$TCA['tx_meineextension_files'] = array (

    'file' => array (       
            'exclude' => 0,       
            'label' => 'LLL:EXT:meineextension/locallang_db.xml:tx_meineextension_files.file',       
            'config' => array (
                'type' => 'group',
                //'internal_type' => 'file',
                'internal_type' => 'file_reference',              
                 ...,
            )
        ),

);

Im Frontendplugin class.tx_meineextension_pi1.php kann das Feld dann so zerlegt werden:

// Bestandteile: [path], [file], [filebody], [fileext], [realFileext]
// Definition at line 4603 of file class.tslib_content.php.
$fileArray = t3lib_div::split_fileref ($row['file']);
$this->conf['fileLink.']['path'] = $fileArray['path'];

$content = $this->cObj->filelink( $fileArray['file'],$this->conf['fileLink.']);

Das Rendering wird weiter definiert in setup.txt

plugin.tx_meineextension_pi1 {

    fileLink {
        stdWrap.wrap = |
        // path kommt aus php datei
        //path =
        file.wrap = |
        icon = 1
        icon_link = 1
        icon.wrap = |
        size = 1
        size.wrap = |
        size.bytes = 1
        size.bytes.labels = " B| KB| MB| GB

      }

}

Bitte beachten Sie: Wenn die Originaldatei in fileadmin/... gelöscht wird, gehen auch die Referenzen verloren.

Bei einem Test in TYPO3 4.4 ist mir aufgefallen, dass jetzt auch die Dateien in /uploads/.. gelöscht werden, wenn keine "echte" Datenbankverknüpfung mehr vorhanden ist. "Echt" heißt, ganz normal per Backendformular erzeugte Kopie.

Zumindest bis TYPO3 4.2.x war das nicht so. Die Dateien blieben bestehen und mussten per Hand gelöscht werden, z.B. mit der Extension kb_cleanfiles.

Vorsicht also bei allen alten Quick and Dirty Lösungen, die mehrfach auf Dateien in /uploads/ zugreifen, um die Anzahl von Kopien zu verringern.

Getestet mit TYPO3 4.4


Kategorie: TYPO3, Extensionentwicklung, Entwickler, Backendformulare