是否可以仅针对特定文件类型或 TYPO3 中特定子文件夹内的文件显示自定义 sys_file_metadata?

Is it possible to display custom sys_file_metadata only for specific file types or for files inside a specific subfolder in TYPO3?

我正在处理文件列表扩展,想知道我是否可以仅为特定文件类型(如 pdf)或特定子文件夹中的所有文件设置额外的元数据。

到目前为止,我已经使用以下设置扩展了 sys_file_metadata:

ext_tables.sql

CREATE TABLE sys_file_metadata (
    tags int(11) unsigned DEFAULT '0' NOT NULL,
    type int(11) unsigned DEFAULT '0'
);

CREATE TABLE sys_file_metadata_tags_mm (
    uid_local int(11) unsigned DEFAULT '0' NOT NULL,
    uid_foreign int(11) unsigned DEFAULT '0' NOT NULL,
    sorting int(11) unsigned DEFAULT '0' NOT NULL,
    sorting_foreign int(11) unsigned DEFAULT '0' NOT NULL,

    KEY uid_local (uid_local),
    KEY uid_foreign (uid_foreign)
);

sys_file_metadata.php

<?php
defined('TYPO3_MODE') || die();

$l1 = 'LLL:EXT:file_portal/Resources/Private/Language/locallang_db.xlf:';

$additionalColumns = [
    'tags' => [
        'exclude' => 1,
        'label' => $l1 . 'tx_fileportal_domain_model_file.tags',
        'config' => [
            'type' => 'select',
            'renderType' => 'selectMultipleSideBySide',
            'foreign_table' => 'tx_fileportal_domain_model_tag',
            'MM' => 'tx_fileportal_fileallocation_tag_mm',
            'size' => 10,
            'autoSizeMax' => 30,
            'maxitems' => 9999,
            'multiple' => 0,
            'wizards' => [
                '_PADDING' => 1,
                '_VERTICAL' => 1,
                'edit' => [
                    'module' => [
                        'name' => 'wizard_edit',
                    ],
                    'type' => 'popup',
                    'title' => 'Edit',
                    'icon' => 'edit2.gif',
                    'popup_onlyOpenIfSelected' => 1,
                    'JSopenParams' => 'height=350,width=580,status=0,menubar=0,scrollbars=1',
                ],
                'add' => [
                    'module' => [
                        'name' => 'wizard_add',
                    ],
                    'type' => 'script',
                    'title' => 'Create new',
                    'icon' => 'add.gif',
                    'params' => [
                        'table' => 'tx_fileportal_domain_model_tag',
                        'pid' => '###CURRENT_PID###',
                        'setValue' => 'prepend'
                    ],
                ],
            ],
        ],
    ],
    'type' => [
        'exclude' => 1,
        'label' => $l1 . 'tx_fileportal_domain_model_file.type',
        'config' => [
            'type' => 'select',
            'renderType' => 'selectSingle',
            'foreign_table' => 'tx_fileportal_domain_model_filetype',
            'minitems' => 0,
            'maxitems' => 1,
            'items' => [
                ['Bitte wählen', 0]
            ],
            'appearance' => [
                'collapseAll' => 0,
                'levelLinksPosition' => 'top',
                'showSynchronizationLink' => 1,
                'showPossibleLocalizationRecords' => 1,
                'showAllLocalizationLink' => 1
            ]
        ]
    ]
];

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('sys_file_metadata', $additionalColumns);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes('sys_file_metadata', 'tags, type');

return $GLOBALS['TCA']['sys_file_metadata'];

效果很好,我可以为我的文件添加一些自定义标签和更具体的自定义类型,但现在我的所有文件都可以使用此选项。有没有办法只针对特定文件类型或特定子文件夹中的文件显示此选项,也许有显示条件?

您可以使用 TCA 中的 displayCond 来做到这一点。检查 documentation.

如果你想依赖某个字段,该字段应该添加到 table 的 TCA 的 ctrl 部分的 requestUpdate 选项中。检查 documentation

现在,如果该字段的值发生变化,您将被要求重新加载表单,因为字段可能会发生变化。

我不知道如何将 "requestUpdate" 添加到 sys_file_metadata 的 TCA,因为 ExtensionManagementUtility 不包含这样的东西,或者我错了吗?到目前为止,显示条件对我来说是有效的,为了完整起见,这里是我的条件示例:

<?php
defined('TYPO3_MODE') || die();

$l1 = 'LLL:EXT:file_portal/Resources/Private/Language/locallang_db.xlf:';

$additionalColumns = [
    'downloadable' => [
        'exclude' => 1,
        'label' => $l1. 'tx_fileportal_domain_model_file.downloadable',
        'config' => [
            'type' => 'select',
            'renderType' => 'selectSingle',
            'items' => [
                ['No', 0],
                ['Yes', 1],
            ],
            'minitems' => 0,
            'maxitems' => 1
        ]
    ],
    'tags' => [
        'displayCond' => 'FIELD:downloadable:>:0',
        'exclude' => 1,
        'label' => $l1 . 'tx_fileportal_domain_model_file.tags',
        'config' => [
            'type' => 'select',
            'renderType' => 'selectMultipleSideBySide',
            'foreign_table' => 'tx_fileportal_domain_model_tag',
            'MM' => 'sys_file_metadata_tag_mm',
            'size' => 10,
            'autoSizeMax' => 30,
            'maxitems' => 9999,
            'multiple' => 0,
            'wizards' => [
                '_PADDING' => 1,
                '_VERTICAL' => 1,
                'edit' => [
                    'module' => [
                        'name' => 'wizard_edit',
                    ],
                    'type' => 'popup',
                    'title' => 'Edit',
                    'icon' => 'edit2.gif',
                    'popup_onlyOpenIfSelected' => 1,
                    'JSopenParams' => 'height=350,width=580,status=0,menubar=0,scrollbars=1',
                ],
                'add' => [
                    'module' => [
                        'name' => 'wizard_add',
                    ],
                    'type' => 'script',
                    'title' => 'Create new',
                    'icon' => 'add.gif',
                    'params' => [
                        'table' => 'tx_fileportal_domain_model_tag',
                        'pid' => '###CURRENT_PID###',
                        'setValue' => 'prepend'
                    ],
                ],
            ],
        ],
    ],
    'type' => [
        'displayCond' => 'FIELD:downloadable:>:0',
        'exclude' => 1,
        'label' => $l1 . 'tx_fileportal_domain_model_file.type',
        'config' => [
            'type' => 'select',
            'renderType' => 'selectSingle',
            'foreign_table' => 'tx_fileportal_domain_model_filetype',
            'minitems' => 0,
            'maxitems' => 1,
            'items' => [
                ['Choose', 0]
            ],
            'appearance' => [
                'collapseAll' => 0,
                'levelLinksPosition' => 'top',
                'showSynchronizationLink' => 1,
                'showPossibleLocalizationRecords' => 1,
                'showAllLocalizationLink' => 1
            ]
        ]
    ],
];

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('sys_file_metadata', $additionalColumns);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes(
    'sys_file_metadata', 'downloadable, tags, type'
);

return $GLOBALS['TCA']['sys_file_metadata'];