Zum Inhalt springen

Mehrere Bilder ausgeben (7.6.3)

Erstellt am 7. März 2016 · 3 Antworten · letzte Antwort am 18. März 2016

Tags: TCA, Dateien & FAL, Frage

benzinkanister ·

Hallo zusammen,

ich habe eine Erweiterung geschrieben, die je Album mehrere Bilder ausgeben soll. Diese werden im Backend über das Feld Image eingepflegt. Alles soweit so gut, es lassen sich beliebig viele Bilder speichern und wenn ich das Album im Backend aufrufe, werden auch wieder alle Bilder angezeigt.
Die Crux an der ganzen Sache ist das Frontend.
Ein Debug zeigt hier nur ein einziges Bild (das erste in der Liste).
Ich hab keinen Schimmer weshalb diese nicht angezeigt werden...

Bin für jede Hilfe dankbar

VG Michael

MODEL:

    /**
     * images
     *
     * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
     */
    protected $images = null;

    /**
     * Returns the images
     *
     * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $images
     */
    public function getImages()
    {
        return $this->images;
    }
    
    /**
     * Sets the images
     *
     * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $images
     * @return void
     */
    public function setImages(\TYPO3\CMS\Extbase\Domain\Model\FileReference $images)
    {
        $this->images = $images;
    }

TCA:

'images' => array(
			'exclude' => 1,
			'label' => 'LLL:EXT:fdgifotoa/Resources/Private/Language/locallang_db.xlf:tx_fdgifotoa_domain_model_album.images',
			'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig(
				'images',
				array(
					'appearance' => array(
						'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference'
					),
					'foreign_types' => array(
						'0' => array(
							'showitem' => '
							--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
							--palette--;;filePalette'
						),
						\TYPO3\CMS\Core\Resource\File::FILETYPE_TEXT => array(
							'showitem' => '
							--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
							--palette--;;filePalette'
						),
						\TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => array(
							'showitem' => '
							--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
							--palette--;;filePalette'
						),
						\TYPO3\CMS\Core\Resource\File::FILETYPE_AUDIO => array(
							'showitem' => '
							--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
							--palette--;;filePalette'
						),
						\TYPO3\CMS\Core\Resource\File::FILETYPE_VIDEO => array(
							'showitem' => '
							--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
							--palette--;;filePalette'
						),
						\TYPO3\CMS\Core\Resource\File::FILETYPE_APPLICATION => array(
							'showitem' => '
							--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
							--palette--;;filePalette'
						)
					),
					'maxitems' => 99
				),
				$GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']
			),
		),
Julian.​Hofmann · · Beste Antwort

Hallo Michael.

Die Darstellung/Funktion des Backends hängt rein vom TCA ab (zumindest der wesentliche Teil). Das Frontend bzw. Extbase konzentriert sich hingegen auf die Domain-Models. D.h. wenn das eine funktioniert, heißt das nicht automatisch, dass das andere auch tut.

Deine Fehlerursache versteckt sich im Model: $images ist vom Typ FileReference. Der Variablen kann man also eine FileReference zuweisen. Du möchtest hier aber mehrere FileReferences verwenden. D.h. Du müsstest $images in ein ObjectStorage von FileReferences umwandeln:

/**
 * images
 *
 * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference>
 */
protected $images = null;

Die üblichen Getter/Setter wären dann addImage, removeImage, setImages, getImages.
Falls Du da nicht weiterkommst, einfach nochmal melden.

Viele Grüße
Julian