Schlagwort-Archive: FAL

Dateien in FAL ersetzen

Wer unter TYPO3 CMS die Extension DAM (Digital Asset Management) einsetzte, weis die Vorteile der Funktion „Datei ersetzen“ zu schätzen. Zum jetzigen Zeitpunkt gibt es eine analoge Funktion unter FAL bzw. TYPO3 CMS 6.2 jedoch nicht.

Ein Trick, um die Funktionalität beizubehalten, ist es, eine Datei mit gleichem Namen in das Verzeichnis hochzuladen und eine bestehende Datei somit zu überschreiben. Die Datei-Referenz bleibt bestehen und somit ist das Ziel erreicht. Nach dem Hochladen kann die (neue) Datei natürlich umbenannt werden.

Gefunden im TYPO-Forum.

Extension auf FAL umstellen

TYPO3 CMS ab Version 6.x setzt auf FAL (File Abstraction Layer) zur Dateireferenzierung. Dies hat einige Vorteile, z.B. kann eine Datei mehrmals verknüpft werden, ohne dass Kopien erstellt werden müssten, wie es vorher der Fall war.

Im Umkehrschluss heißt das allerdings, dass der Dateizugriff im PHP-Quellcode der TYPO3-Erweiterungen angepasst werden muss, wenn bspw. Bilder dargestellt werden. Hier ein kurzes Beispiel zur Umstellung.

In einer Extension in TYPO3 CMS 4.7 zur Darstellung als Template-Marker sah es noch so aus:

# $this->cObj->data => vollstaendiger darszustellender Datensatz
$tmp = explode(',', $this->cObj->data['image']);
if (count($tmp)>0){
  foreach ($tmp as $key=>$value){
    $markerArray['###MY_IMAGE###'] = $this->cObj->IMG_RESOURCE( array( 'file'=>'uploads/pics/' . $value, 'file.'=>array( 'width'=>'199m', 'height'=>'165' )) );
    $this->cObj->substituteMarkerArrayCached($subparts['template_alt_image'], $markerArray);
  }
}

Nach der Umstellung auf TYPO3 CMS 6.2 sieht obiger Code dann so aus:

if (intval($this->cObj->data['image'])>0){ # $this->cObj->data['image'] enthaelt nun die Anzahl der referenzierten Dateien
  $fileRepository = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Resource\\FileRepository');
  $fileObjects = $fileRepository->findByRelation('tt_content', 'image', $this->cObj->data['uid']);
  foreach ($fileObjects as $key=>$value){
    $markerArray['###MY_IMAGE###'] = $this->cObj->IMG_RESOURCE( array(
'file.'=>array('treatAsReference'=>1, 'width'=>'199m', 'height'=>'165', ),
'file' => $value->getOriginalFile()->getProperties()['uid'],
'params'=>'',
'altText'=>'',
) );
  $this->cObj->substituteMarkerArrayCached($subparts['template_alt_image'], $markerArray);
  }
}

Eine sehr hilfreiche Dokumentationen dazu ist das TYPO3Wiki.