Mittlerweile klappt das mit dem File Abstraction Layer (FAL) immer besser.
Und wie es klappt, folgt nun. Ziel ist, zwei FAL Felder in eine eigene Extension zu integrieren und alle nötigen Schritte bis zur Ausgabe im Fluid Template zu zeigen.
Die Extension im Beispiel heißt “falusage” und die Tabelle bzw das Model heißt “Root”.
- Es wird von TYPO3 6.1 ausgegangen.
- Es wird von einer Extension ausgegangen, die mit dem Extension Builder erstellt wurde. Dadurch bereits vorhandene Konfigurationen werden nicht erklärt.
- Im Extension Builder wurden am Model “Root” zwei Felder “image” (ein Bild) und “files” (Dateien) konfiguriert und der Controller beherrscht eine List-Action.
Datei ext_tables.sql
CREATE TABLE tx_falusage_domain_model_root (
# ...
image varchar(255) DEFAULT '' NOT NULL,
files varchar(255) DEFAULT '' NOT NULL,
# ...
);
Datei Configuration/TCA/Root.php
$TCA['tx_falusage_domain_model_root'] = array(
// ...
'image' => array(
'exclude' => 1,
'label' => 'Image',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig('image', array(
'appearance' => array(
'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference'
),
'minitems' => 0,
'maxitems' => 1,
), $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']),
),
'files' => array(
'exclude' => 1,
'label' => 'Files',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig('files', array(
'appearance' => array(
'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference'
),
), $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']),
),
// ...
);
An getFileFieldTCAConfig wird der aktuelle Feldname übergeben. Die Funktion erzeugt einen großen Schwung Konfiguration.
Datei Classes/Domain/Model/Root.php
class Root extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
// ...
/**
* Image
* @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
*/
protected $image;
/**
* Files
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference>
*/
protected $files;
// ...
/**
* Returns the image
*
* @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> $image
*/
public function getImage() {
return $this->image;
}
/**
* Sets the image
*
* @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> $image
* @return void
*/
public function setImage($image) {
$this->image = $image;
}
/**
* Returns the files
*
* @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> $files
*/
public function getFiles() {
return $this->files;
}
/**
* Sets the files
*
* @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> $files
* @return void
*/
public function setFiles($files) {
$this->files = $files;
}
// ...
}
“\TYPO3\CMS\Extbase\Domain\Model\FileReference” als Typ ist wichtig, “File” funktioniert wider erwarten nicht und zu ganz wilden Fehlern.
Datei Classes/Controller/RootController.php
class RootController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
// ..
public function listAction() {
$roots = $this->rootRepository->findAll();
$this->view->assign('roots', $roots);
}
// ..
}
Datei Resources/Private/Templates/Root/List.html
Es folgen eine ganze Reihe Fluid Beispiel; wie man an welche Information rankommt.
Mein Model: root
Das FileReference Model: root.image
Der sys_file_reference Datensatz: root.image.originalResource
Der sys_file Datensatz: root.image.originalResource.originalFile
<f:for each="{roots}" as="root">
Orginal-Attribute:<br />
Dateiname: {root.image.originalResource.originalFile.name}<br />
Titel: {root.image.originalResource.originalFile.title}<br />
Beschreibung: {root.image.originalResource.originalFile.description}<br />
Alt-Text: {root.image.originalResource.originalFile.alternative}<br />
UID: {root.image.originalResource.originalFile.uid}<br />
Pfad: {root.image.originalResource.publicUrl}<br /><br />
Referenz-Attribute:<br />
Titel: {root.image.originalResource.title}<br />
Beschreibung: {root.image.originalResource.name}<br /><br />
Ausgabe als Bild:<br />
<f:image src="{root.image.originalResource.originalFile.uid}" alt="" /><br />
<f:image src="{root.image.uid}" alt="" treatIdAsReference="TRUE" /><br /><br />
Als Link:<br />
<a href="{file.originalResource.publicUrl}">{file.originalResource.title}</a><br /><br />
<f:for each="{root.files}" as="file">
<p>{file.originalResource.originalFile.title}</p>
</f:for>
</f:for>
Für Typoscript:
Für Typoscript gibt es hier ein paar Beispiele, aber keine Garantie ob insb. Forenbeiträge aktuell sind.