Typo3 10.4 - 如何将 FAL 图像添加到我的扩展

Typo3 10.4 - How to add FAL image to my extension

我是 Typo3 的新用户,我正在尝试使用 FAL 将图像添加到我的扩展中。

我在 Whosebug 上找到了一些旧文档和帖子来帮助我添加 FAL 来添加图像,我使用的是 10.4 版本。

我配置了我的 TCA、我的 locallang 和模型,但该字段没有出现在后端,使用的源很旧我不知道我是否遗漏了一些让它工作的东西

我把它添加到我的 Configuration/TCA 中:

        'image' => [
            'exclude' => true,
            'label' => 'LLL:EXT:myextension/Resources/Private/Language/locallang_db.xlf:tx_myextension_domain_model_atelier.image',
            'config' =>
                \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig(
                    'image',
                    [
                        'appearance' => [
                            'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference'
                        ],
                        'foreign_types' => [
                            '0' => [
                                'showitem' => '
                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
                            --palette--;;filePalette'
                            ],
                            \TYPO3\CMS\Core\Resource\File::FILETYPE_TEXT => [
                                'showitem' => '
                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
                            --palette--;;filePalette'
                            ],
                            \TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => [
                                'showitem' => '
                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
                            --palette--;;filePalette'
                            ],
                            \TYPO3\CMS\Core\Resource\File::FILETYPE_AUDIO => [
                                'showitem' => '
                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
                            --palette--;;filePalette'
                            ],
                            \TYPO3\CMS\Core\Resource\File::FILETYPE_VIDEO => [
                                'showitem' => '
                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
                            --palette--;;filePalette'
                            ],
                            \TYPO3\CMS\Core\Resource\File::FILETYPE_APPLICATION => [
                                'showitem' => '
                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
                            --palette--;;filePalette'
                            ]
                        ],
                        'foreign_match_fields' => [
                            'fieldname' => 'image',
                            'tablenames' => 'tx_myextension_domain_model_atelier',
                            'table_local' => 'sys_file',
                        ],
                        'maxitems' => 3
                    ],
                    $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']
                ),

        ],

Language/locallang.xlf :

<trans-unit id="tx_myextension_domain_model_atelier.image">
   <source>image</source>
</trans-unit>

型号:

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


    /**
     * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> $image
     */
    public function getImage()
    {
        return $this->image;
    }

    /**
     * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> $image
     * @return void
     */
    public function setImage(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $image)
    {
        $this->image = $image;
    }

有人可以告诉我我是否遗漏了什么,或者我是否犯了错误吗?谢谢

我首先看到你遗漏的是每当你使用 ObjectStorage 时,你必须先初始化它。这意味着,在您的模型中,您必须执行以下操作:

/**
* Initializes all ObjectStorage properties when model is reconstructed from DB (where __construct is not called)
* Do not modify this method!
* It will be rewritten on each save in the extension builder
* You may modify the constructor of this class instead
*/
public function initializeObject()
{
   $this->image = $this->image ?? new ObjectStorage();
}

要在后端显示它,您必须做的第二件事是将它添加到 types。这些类型负责后端视图,您可以配置列、选项卡和调色板的显示顺序。

return [
    'ctrl' => [...],
    'types' => [
        '0' => [
            'showitem' => 'hidden, image, sys_language_uid, l10n_parent, l10n_diffsource'
        ],
    ],
    'columns' => [...]
];