【问题标题】:Add custom image field to tt_content将自定义图像字段添加到 tt_content
【发布时间】:2020-09-14 07:45:06
【问题描述】:

如何正确地将自定义图像字段添加到 tt_content ?我使用 Overrides/tt_content.php 和 ext_tables.sql 制作了第一部分,因此我可以在后端看到新字段,在前端上下文中我得到 data.tx_pnbase_icon。
但是我无法在后端选择图像,也不会保存,即使带有文件列表的弹出窗口有效。
我是否必须告诉 tt_content 将该字段与 sys_file_reference(在 Typoscript 中)连接起来? 或者,我什至必须扩展 Content 模型?

Field in backend

<?php

$temporaryColumn = array(
    'tx_pnbase_icon' => [
        'label' => 'Icon für Inhalt',
        'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::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'
                    ],
                    \TYPO3\CMS\Core\Resource\File::FILETYPE_TEXT => [
                        'showitem' => '
                                --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_gallery.imageoverlayPalette;imageoverlayPalette,
                                --palette--;;filePalette'
                    ],
                    \TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => [
                        'showitem' => '
                                --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_gallery.imageoverlayPalette;imageoverlayPalette,
                                --palette--;;filePalette'
                    ],
                    \TYPO3\CMS\Core\Resource\File::FILETYPE_AUDIO => [
                        'showitem' => '
                                --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_gallery.imageoverlayPalette;imageoverlayPalette,
                                --palette--;;filePalette'
                    ],
                    \TYPO3\CMS\Core\Resource\File::FILETYPE_VIDEO => [
                        'showitem' => '
                                --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_gallery.imageoverlayPalette;imageoverlayPalette,
                                --palette--;;filePalette'
                    ],
                    \TYPO3\CMS\Core\Resource\File::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']
        ),
    ],
);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns(
        'tt_content',
        $temporaryColumn
);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::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'
);

【问题讨论】:

  • 您能在Overrides/tt_content.php 中分享您的PHP 代码吗?我也不完全理解是否无法选择图像并存储它,或者是否只是在前端检索图像的问题。
  • 我已经从 Overrides/tt_content.php 添加了代码
  • 谢谢,你能回答我的第二个问题吗?您是否还添加了 ext_tables.sql 或使用新字段 tx_pnbase_icon 的新列调整现有的?
  • 对不起,没有意识到你的第二个问题;但我很感激你愿意帮助我!我将扩展我原来的问题。
  • 很奇怪;现在突然我可以选择一个图像并保存它!?但是如何获得正确的原始图像文件,而不仅仅是前端的“1”?

标签: typo3 typo3-9.x


【解决方案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 包含有关如何检索文件的完整概述。

【讨论】:

  • 谢谢!我不确定是否有更简单的解决方案;我过去通过 ViewHelper 意识到了这一点......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 2019-01-01
  • 1970-01-01
  • 2017-01-12
相关资源
最近更新 更多