lisardo
lisardo

Reputation: 1454

how to disable fields in tca only for certain ctypes

I want to disable certain fields in the backend, e.g. many fields of gridelements and other content elements. I know about the possibilities of TCEFORM but it allowes only to disable a field in all cTypes. I need a way to disable certain field only for certain cTypes.

Is there a way to achieve this? Thanks

Upvotes: 4

Views: 6727

Answers (4)

cweiske
cweiske

Reputation: 31078

I wanted to remove the categories field from the pages form for a certain page type 30 and did this in Configuration/TCA/Overrides/pages.php:

$GLOBALS['TCA']['pages']['types'][30] = $GLOBALS['TCA']['pages']['types'][1];
$GLOBALS['TCA']['pages']['types'][30]['showitem'] = str_replace(
    [
        ' --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,',
        ' categories,'
    ],
    '',
    $GLOBALS['TCA']['pages']['types'][30]['showitem']
);

This copies the type definition of page type 1 to page type 30 and removes the categories tab and the categories field.

Upvotes: 0

Ben
Ben

Reputation: 1021

Meanwhile (since 9 LTS) it is possible via TsConfig:

TCEFORM.tt_content.subheader.types.text.disabled = 1

… disables the subheader field for all text content elements.

You can even disable a field for all cTypes and define an exception:

TCEFORM.tt_content.subheader{
    disabled = 1
    types.text.disabled = 0
}

Upvotes: 3

jokumer
jokumer

Reputation: 2269

You have full control over which field are shown, if you adapt TCA for tt_content. You can override TCA with your customer extensions (sitepackage).

The following file contains fields, which are shown for CType header (TYPO3 CMS 7.6)

EXT:sitepackage/Configuration/TCA/Overrides/tt_content.php

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

call_user_func(function () {
    $GLOBALS['TCA']['tt_content']['types']['header']['showitem'] = '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.headers;headers,rowDescription,--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.visibility;visibility,--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,--div--;LLL:EXT:lang/locallang_tca.xlf:sys_category.tabs.category,categories';
});

Remove or add any fields after your needs and do so for any CType you wish to change. See also https://docs.typo3.org/typo3cms/TCAReference/7.6/Reference/Types/Index.html

Upvotes: 3

Jo Hasenau
Jo Hasenau

Reputation: 2684

As long as you don't need additional conditions like i.e. a certain user or group or a particular branch of the page tree to disable these fields, you should not go for PageTSconfig and TCEFORM but pure TCA types instead.

Just create a site package extension, which would be recommended anyway, and make sure to provide the desired setup for the tt_content table within Configuration/TCA/Overrides/tt_content.php so it will be applied automatically.

You can find some slides about the "Anatomy of Sitepackages" here: https://de.slideshare.net/benjaminkott/typo3-the-anatomy-of-sitepackages

Additional information about the TCA types can be found here: https://docs.typo3.org/typo3cms/TCAReference/Types/Index.html

As Gridelements just provides mandatory fields for layout, children, container and column, you should not disable these fields though, since it might break the functionality.

Upvotes: 1

Related Questions