Добавить пользовательское поле изображения в tt_content

#typo3 #typo3-9.x

#typo3 #typo3-9.x

Вопрос:

как я могу правильно добавить пользовательское поле изображения в tt_content? Я сделал первую часть с Overrides/tt_content.php и в ext_tables.sql, и, таким образом, я могу видеть новое поле в серверной части, а в контексте интерфейса я получаю data.tx_pnbase_icon.
Но я не могу выбрать изображение в серверной части, и оно не будет сохранено, даже если всплывающее окно со списком файлов работает.
Должен ли я указывать tt_content для соединения поля с sys_file_reference (в Typoscript)? Или мне вообще нужно расширять модель содержимого?

Поле в серверной части

 <?php

$temporaryColumn = array(
    'tx_pnbase_icon' => [
        'label' => 'Icon für Inhalt',
        'config' => TYPO3CMSCoreUtilityExtensionManagementUtility::getFileFieldTCAConfig(
            'tx_pnbase_icon',
            [
                'appearance' => [
                    'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFilegallery'
                ],
                'foreign_types' => [
                    '0' => [
                        'showitem' => '
                                --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_gallery.imageoverlayPalette;imageoverlayPalette,
                                --palette--;;filePalette'
                    ],
                    TYPO3CMSCoreResourceFile::FILETYPE_TEXT => [
                        'showitem' => '
                                --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_gallery.imageoverlayPalette;imageoverlayPalette,
                                --palette--;;filePalette'
                    ],
                    TYPO3CMSCoreResourceFile::FILETYPE_IMAGE => [
                        'showitem' => '
                                --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_gallery.imageoverlayPalette;imageoverlayPalette,
                                --palette--;;filePalette'
                    ],
                    TYPO3CMSCoreResourceFile::FILETYPE_AUDIO => [
                        'showitem' => '
                                --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_gallery.imageoverlayPalette;imageoverlayPalette,
                                --palette--;;filePalette'
                    ],
                    TYPO3CMSCoreResourceFile::FILETYPE_VIDEO => [
                        'showitem' => '
                                --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_gallery.imageoverlayPalette;imageoverlayPalette,
                                --palette--;;filePalette'
                    ],
                    TYPO3CMSCoreResourceFile::FILETYPE_APPLICATION => [
                        'showitem' => '
                                --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_gallery.imageoverlayPalette;imageoverlayPalette,
                                --palette--;;filePalette'
                    ]
                ],
                'foreign_match_fields' => [
                    'fieldname' => 'tx_pnbase_icon',
                    'tablenames' => 'tt_content',
                    'table_local' => 'sys_file',
                ],
                'maxitems' => 1
            ],
            $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']
        ),
    ],
);
TYPO3CMSCoreUtilityExtensionManagementUtility::addTCAcolumns(
        'tt_content',
        $temporaryColumn
);
TYPO3CMSCoreUtilityExtensionManagementUtility::addFieldsToPalette(
        'tt_content',
        'appearanceLinks', //  layout
        'tx_pnbase_icon',
        'after:layout' // 'after:' layout
);
  

В ext_tables.sql

 CREATE TABLE tt_content (
        tx_pnbase_icon int(11) unsigned NOT NULL default '0'
);
  

Комментарии:

1. Можете ли вы поделиться своим PHP-кодом изнутри Overrides/tt_content.php ? Я также не до конца понимаю, невозможно ли выбрать изображение и сохранить его, или проблема заключается только в получении изображения во внешнем интерфейсе.

2. Я добавил код из Overrides/tt_content.php

3. Спасибо, вы можете ответить на мой 2-й вопрос? Также вы добавили ext_tables.sql или скорректировали существующий столбец с новым столбцом для вашего нового поля tx_pnbase_icon?

4. Извините, не понял ваш второй вопрос; но я очень благодарен, что вы готовы мне помочь! Я собираюсь расширить свой первоначальный вопрос.

5. Это очень странно; теперь внезапно я могу выбрать изображение и сохранить его !? Но как мне получить правильный исходный файл изображения, а не только «1» во внешнем интерфейсе?

Ответ №1:

TYPO3 по умолчанию сохранит только количество связей внутри столбцов. В случае, если вы работаете с TypoScript FLUIDTEMPLATE , вы можете использовать обработку данных для разрешения отношений файлов. Смотрите https://docs.typo3.org/m/typo3/reference-typoscript/10.4/en-us/ContentObjects/Fluidtemplate/Index.html#dataprocessing для ознакомления с концепцией и https://github.com/TYPO3/TYPO3.CMS/blob/10.4/typo3/sysext/frontend/Classes/DataProcessing/FilesProcessor.php для использования конкретным процессором. У всех процессоров есть пример использования в их PHPDoc.

В случае, если вы используете обычный TypoScript, вы должны иметь возможность использовать FILES CObject: https://docs.typo3.org/m/typo3/reference-typoscript/master/en-us/ContentObjects/Files/Index.html#cobj-files .

https://docs.typo3.org/m/typo3/reference-coreapi/10.4/en-us/ApiOverview/Fal/UsingFal/Frontend.html содержит полный обзор того, как извлекать файлы.

Комментарии:

1. Спасибо! Я не был уверен, есть ли более простое решение; Я понял это в прошлом с помощью ViewHelper…