TSconfig Reference

Version

main

Language

en

Author

TYPO3 contributors

License

This document is published under the Open Publication License.

Rendered

Thu, 27 Jun 2024 15:15:22 +0000


This document describes TSconfig: A TypoScript-like syntax for configuring details of the TYPO3 backend.

In addition, you can find a quick reference guide to TypoScript templates in TypoScript in 45 Minutes, a complete reference of all object types and properties of TypoScript in TypoScript Reference and explanations of TypoScript syntax in the chapter "TypoScript Syntax" of TYPO3 Explained.


Table of Contents:

TSconfig Reference

Version

main

Language

en

Author

TYPO3 contributors

License

This document is published under the Open Publication License.

Rendered

Thu, 27 Jun 2024 15:15:22 +0000


This document describes TSconfig: A TypoScript-like syntax for configuring details of the TYPO3 backend.

In addition, you can find a quick reference guide to TypoScript templates in TypoScript in 45 Minutes, a complete reference of all object types and properties of TypoScript in TypoScript Reference and explanations of TypoScript syntax in the chapter "TypoScript Syntax" of TYPO3 Explained.


Table of Contents:

Introduction

About this document

This document describes TSconfig and its options: A TypoScript a-like configuration syntax to configure details of the backend for backend users based on a user, group and page level.

This document can be seen as detail below the main TYPO3 Explained documentation. It is too huge to be integrated into TYPO3 Explained directly.

First parts of this document explain the concepts of TSconfig, the different places it can be found in the system, how it can be diagnosed, and goes a bit into the PHP API if developers need to access data from TSconfig. The rest of the document is a reference: A document to look-up and find properties on a daily basis.

This document is especially important for integrators who want to make life as easy as possible for their dear backend users.

About TSconfig

TSconfig is used in TYPO3 to configure and customize the backend on a page and a user or group basis. The syntax to do this is based on TypoScript that is also used to configure frontend output of the web site.

The whole point of TSconfig is that it allows configuration of backend details by integrators, without asking developers for writing PHP code. Thus, some areas of TSconfig are rather powerful and offer vast possibilities of customizing the TYPO3 backend.

TSconfig is divided into configuration for pages ("Page TSconfig") and configuration for users and groups ("User TSconfig"). Each variant is further detailed in this document.

The general "dotted notation" of TypoScript is re-used for Page TSconfig and User TSconfig, it is possible to reference values, use conditions, and so on. For a general look at the syntax, please read the according section of TYPO3 Explained.

Other than the basic syntax, TSconfig and frontend TypoScript have nothing in common. Properties outlined in the TypoScript Reference can never be used in TSconfig and vice versa. Frontend TypoScript and TSconfig are different things: TypoScript is used to steer the rendering of the frontend web site, TSconfig is used to configure what is displayed to a logged in backend user.

While this might be confusing in the first place, it becomes clear as soon as integrators start using TSconfig and looking at the available options: It is all about setting values to configure if a backend users sees or does not see this-and-that, give a user additional editing options, or removing them. As a last note to complete this picture: TSconfig is also used to configure the "Admin panel" in the frontend. While this might look funny in the first place, thinking about that makes clear on why admin panel configuration options are bound to TSconfig and not to frontend TypoScript: The admin panel is basically a view to parts of the backend that is shown in the frontend, it is entirely bound to backend users. So, the admin panel is a backend thing, even if displayed in frontend, it is for backend users. This is why the admin panel is configured via TSconfig.

Using and setting TSconfig

This chapter gives an overview where TSconfig is set, how it can be edited, and the load order of the different variants.

TSconfig can be used in page, it is then referred to as "Page TSconfig", or for backend users and backend user groups, in which case it is known as "User TSconfig".

Lists different options of how to include Page TSconfig options.

Lists different options of how to include User TSconfig options.

A short introduction in the syntax of TSconfig and how it differs from TypoScript setup.

Explains how Conditions can be used in TSconfig of both user and page.

Explains how TSconfig can be retrieved from and used within the PHP code of backend modules.

Setting page TSconfig

It is recommended to always define custom page TSconfig in a project-specific sitepackage extension. This way the page TSconfig settings can be kept under version control.

The options described below are available for setting page TSconfig in non-sitepackage extensions.

Page TSconfig can be defined globally as Default page TSconfig, on site level via Page TSconfig via site or set or for a page tree, a page and all its subpages.

It is also possible to set set page TSconfig directly in the page properties but this is not recommended anymore.

Setting the page TSconfig globally

New in version 12.0

Starting with TYPO3 v12.0 page TSconfig in a file named Configuration/page.tsconfig in an extension is automatically loaded during build time.

Global page TSconfig should be stored within an extension, usually a sitepackage extension. The content of the file Configuration/page.tsconfig within an extension is automatically loaded during build time.

It is possible to load other TSconfig files with the import syntax within this file:

EXT:my_sitepackage/Configuration/page.tsconfig
@import 'EXT:my_sitepackage/Configuration/TsConfig/Page/Basic.tsconfig'
@import 'EXT:my_sitepackage/Configuration/TsConfig/Page/Mod/Wizards/NewContentElement.tsconfig'
Copied!

Many page TSconfig settings can be set globally. This is useful for installations that contain only one site and use only one sitepackage extension.

Extensions supplying custom default page TSconfig that should always be included, can also set the page TSconfig globally.

The PSR-14 event BeforeLoadedPageTsConfigEvent is available to add global static page TSconfig before anything else is loaded.

Global page TSconfig, compatible with TYPO3 v11 and v12

In TYPO3 v11 installations the content of Configuration/page.tsconfig is not loaded automatically yet. You can achieve compatibility with both TYPO3 v11 and v12 by importing the content of this file with the API function ExtensionManagementUtility::addPageTSConfig:

EXT:my_sitepackage/ext_localconf.php
<?php

declare(strict_types=1);

use TYPO3\CMS\Core\Information\Typo3Version;
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
use TYPO3\CMS\Core\Utility\GeneralUtility;

defined('TYPO3') or die();

$versionInformation = GeneralUtility::makeInstance(Typo3Version::class);
// Only include page.tsconfig if TYPO3 version is below 12 so that it is not imported twice.
if ($versionInformation->getMajorVersion() < 12) {
    ExtensionManagementUtility::addPageTSConfig(
        '@import "EXT:my_sitepackage/Configuration/page.tsconfig"'
    );
}
Copied!

Page TSconfig on site level

New in version 13.1

Page TSconfig can be included on a per site level.

Page TSconfig can be defined on a site level by placing a file called page.tsconfig in the storage directory of the site (config/sites/<identifier>/).

Extensions and site packages can provide page TSconfig in site sets by placing a file called page.tsconfig into the folder of that set.

This way sites and sets can ship page TSconfig without the need for database entries or by polluting global scope. Dependencies can be expressed via site sets, allowing for automatic ordering and deduplication.

See also site sets as page TSconfig provider.

Example: load page TSconfig from the site set and the site

Let us assume, you have a site set defined in your extension:

EXT:my_extension/Configuration/Sets/MySet/config.yaml
name: my-vendor/my-set
label: My Set
Copied!

And use it in a site in your project:

config/sites/my-site/config.yaml
base: 'http://example.com/'
rootPageId: 1
dependencies:
  - my-vendor/my-set
Copied!

You can now put a file called page.tsconfig in the same folder like your site configuration and it will be automatically loaded for all pages in that site.

config/sites/my-site/page.tsconfig
# This tsconfig will be loaded for pages in site "my-site"
# [...]
Copied!

Or you can put the file page.tsconfig in the same directory like the site set you defined in your extension. It will then be loaded by all pages of all sites that depend on this set:

EXT:my_extension/Configuration/Sets/MySet/page.tsconfig
# This tsconfig will be loaded for pages in all sites that depend on set 'my-vendor/my-set'
# [...]
Copied!

Static page TSconfig

Include static page TSconfig into a page tree

Static page TSconfig that has been registered by your sitepackage or a third party extension can be included in the page properties.

  1. Go to the page properties of the page where you want to include the page TSconfig.
  2. Go to the tab Resources, then to page TSconfig > Include static page TSconfig (from extensions) and select the desired configurations from the Available Items.

Register static page TSconfig files

Register PageTS config files in the Configuration/TCA/Overrides/pages.php of any extension.

These can be selected in the page properties.

EXT:my_sitepackage/Configuration/TCA/Overrides/pages.php
<?php

use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;

ExtensionManagementUtility::registerPageTSConfigFile(
    'extension_name',
    'Configuration/TsConfig/Page/myPageTSconfigFile.tsconfig',
    'My special config'
);
Copied!

It is not possible to use language strings LLL:... for the third parameter as the extension name will be automatically appended.

If you need to localize these labels, modify the TCA directly instead of using the API function:

EXT:my_sitepackage/Configuration/TCA/Overrides/pages.php
<?php

$GLOBALS['TCA']['pages']['columns']['tsconfig_includes']['config']['items'][] =
    [
        'LLL:EXT:my_sitepackage/Resources/Private/Language/locallang_db.xlf:pages.pageTSconfig.my_ext_be_layouts',
        'EXT:my_sitepackage/Configuration/TsConfig/Page/myPageTSconfigFile.tsconfig',
    ];
Copied!

Set page TSconfig directly in the page properties

Go to the page properties of the page where you want to include the page TSconfig and open the tab Resources.

You can enter page TSconfig directly into the field Page TSconfig:

TSconfig-related fields in the Resources tab of a page

Page TSconfig inserted directly into the page properties is applied to the page itself and all its subpages.

Verify the final configuration

The full page TSconfig for any given page can be viewed using the module Page TSconfig with in the Site Management section.

Overriding and modifying values

Page TSconfig is loaded in the following order, the latter override the former:

  1. Default page TSconfig that was set globally
  2. Static page TSconfig that was included for a page tree.
  3. Direct page TSconfig entered directly in the page properties.
  4. User TSconfig overrides

Static and direct page TSconfig are loaded for the page they are set on and all their subpages.

The TypoScript syntax to modify values can also be used for the page TSconfig.

Example

Default page TSconfig

EXT:site_package/Configuration/page.tsconfig
RTE.default.proc.allowTagsOutside = hr
Copied!

Static page TSconfig included on the parent page

EXT:site_package/Configuration/page.tsconfig
RTE.default.proc.allowTagsOutside := addToList(blockquote)
Copied!

Finally you get the value "hr,blockquote".

Setting user TSconfig

It is recommended to always define custom user TSconfig in a project-specific sitepackage extension. This way the user TSconfig settings can be kept under version control.

Importing the user TSconfig into a backend user or group

  1. Open the record of the user or group. Go to Options > TSconfig.

    The TSconfig field in the Options tab of a backend user

    The TSconfig field in the Options tab of a backend user

  2. Enter the following TSconfig to import a configuration file from your sitepackage:

    TsConfig added in the backend record of a backend user or group
    @import 'EXT:my_sitepackage/Configuration/TsConfig/User/my_editor.tsconfig'
    Copied!

This will make all settings in the file available to the user. The file itself can be kept under version control together with your sitepackage.

TSconfig defined at user level overrides TSconfig defined at group level.

If a user is a member of several groups, the TSconfig from each group is loaded. The order in which the groups are added to the user in field General > Group is used.

The TSconfig from latter groups overrides the TSconfig from earlier groups if both define the same property.

Setting default user TSconfig

New in version 13.0

Starting with TYPO3 v13.0 user TSconfig in a file named Configuration/user.tsconfig in an extension is automatically loaded during build time.

User TSconfig is designed to be individual for users or groups of users. However, good defaults can be defined and overridden by group or user-specific TSconfig.

Default user TSconfig should be stored within an extension, usually a sitepackage extension. The content of the file Configuration/user.tsconfig within an extension is automatically loaded during build time.

It is possible to load other user TSconfig files with the import syntax within this file:

EXT:my_extension/Configuration/user.tsconfig
@import 'EXT:my_sitepackage/Configuration/TsConfig/User/default.tsconfig'
Copied!

The PSR-14 event BeforeLoadedUserTsConfigEvent is available to add global static user TSconfig before anything else is loaded.

User TSconfig, compatible with TYPO3 v12 and v13

In TYPO3 v12 installations the content of Configuration/user.tsconfig is not loaded automatically. You can achieve compatibility with both TYPO3 v12 and v13 by importing the content of this file with the API function ExtensionManagementUtility::addUserTSConfig:

EXT:my_sitepackage/ext_localconf.php
<?php

declare(strict_types=1);

use TYPO3\CMS\Core\Information\Typo3Version;
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
use TYPO3\CMS\Core\Utility\GeneralUtility;

defined('TYPO3') or die();

$versionInformation = GeneralUtility::makeInstance(Typo3Version::class);
// Only include user.tsconfig if TYPO3 version is below 13 so that it is not imported twice.
if ($versionInformation->getMajorVersion() < 13) {
    ExtensionManagementUtility::addUserTSConfig(
        '@import "EXT:my_sitepackage/Configuration/user.tsconfig"'
    );
}
Copied!

Deprecated since version 13.0

The method \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addUserTSConfig() has been marked as deprecated in TYPO3 v13 and will be removed with TYPO3 v14.

Verify the final configuration

The full user TSconfig of the currently logged-in backend user can be viewed using the System > Configuration backend module and choosing the action $GLOBALS['BE_USER']->getTSConfig() (User TSconfig). However this module can only be accessed by admins.

Viewing user TSconfig using the Configuration module

Viewing user TSconfig using the Configuration module

The Configuration module is available with installed lowlevel system extension.

Override and modify values

Properties, which are set in the TSconfig field of a group, are valid for all users of that group.

Values set in one group can be overridden and modified in the same or another group. If a user is a member of multiple groups, the TSconfig settings are evaluated in the order in which the groups are included in the user account: When editing the backend user, the selected groups are evaluated from top to bottom.

Example:

  • Add in user TSconfig

    EXT:site_package/Configuration/user.tsconfig
    page.RTE.default.showButtons = bold
    Copied!
  • You get the value "bold".
  • Add later in user TSconfig

    EXT:site_package/Configuration/user.tsconfig
    page.RTE.default.showButtons := addToList(italic)
    Copied!
  • You get the value "bold,italic".

Finally, you can override or modify the settings from groups that your user is a member of in the user TSconfig field of that specific user.

Example:

Let's say the user is a member of a usergroup with this configuration:

EXT:site_package/Configuration/page.tsconfig
TCAdefaults.tt_content {
    hidden = 1
    header = Hello!
}
Copied!

Then we set the following values in the TSconfig field of the specific user.

EXT:site_package/Configuration/user.tsconfig
page.TCAdefaults.tt_content.header = 234
options.clearCache.all = 1
Copied!

This would override the default value of the header ("234") and add the clear cache option. The default value of the hidden field is not changed and simply inherited directly from the group.

Overriding page TSconfig in user TSconfig

All properties from page TSconfig can be overridden in user TSconfig by prepending the property name with page..

When a page TSconfig property is set in user TSconfig that way, regardless of whether it is in the TSconfig field of a group or a user, it overrides the value of the according page TSconfig property.

To illustrate this feature let's say new pages and copied pages are not hidden by default:

EXT:site_package/Configuration/page.tsconfig
TCAdefaults.pages.hidden = 0
TCEMAIN.table.pages.disableHideAtCopy = 1
Copied!

If we activate the following configuration in the user TSconfig of a certain backend user group, new and copied pages will be hidden for that group. The user TSconfig to be used is the same, but prefixed with page.

EXT:site_package/Configuration/TSconfig/editors.tsconfig
// Override the settings from the page TSconfig for the editors usergroup
page {
    TCAdefaults.pages.hidden = 1
    TCEMAIN.table.pages.disableHideAtCopy = 0
}
Copied!

Syntax

While the objects, properties and conditions are different, the syntax of TSconfig is basically the same as it is for TypoScript in frontend TypoScript templates.

Please note the following differences:

  • In TSconfig no constants are available.
  • There are differences in the conditions that can be used.
  • The general TypoScript syntax is described in TypoScript syntax.

Conditions

TSconfig TypoScript conditions offer a way to conditionally change TypoScript based on current context. See the TypoScript syntax condition chapter for the basic syntax of conditions.

It is possible to use TypoScript conditions in both user TSconfig and page TSconfig, just as it is done in frontend TypoScript. The list of available variables and functions is different, though.

The Symfony expression language tends to throw warnings when sub arrays are checked in a condition that do not exist. Use the traverse function to avoid this.

Condition variables available in TSconfig

applicationContext

applicationContext
Type
string

Current application context as string. See Application context.

Example: Condition applies in application context "Development"

EXT:site_package/Configuration/page.tsconfig
[applicationContext == "Development"]
    // Your settings go here
[END]
Copied!

Example: Condition applies in any application context that does not start with "Production"

This condition applies in any context that is "Production" or starts with "Production" (for example Production/Staging"):

EXT:site_package/Configuration/page.tsconfig
[applicationContext matches "/^Production/"]
    // Your settings go here
[END]
Copied!

page

page
Type
array

All data of the current page record as array. Only available in page TSconfig, not in user TSconfig.

Example: Condition applies only on certain pages

EXT:site_package/Configuration/page.tsconfig
# Check single page uid
[traverse(page, "uid") == 2]
    // Your settings go here
[END]
# Check list of page uids
[traverse(page, "uid") in [17,24]]
    // Your settings go here
[END]
# Check list of page uids NOT in
[traverse(page, "uid") not in [17,24]]
    // Your settings go here
[END]
# Check range of pages (example: page uid from 10 to 20)
[traverse(page, "uid") in 10..20]
    // Your settings go here
[END]

# Check the page backend layout
[traverse(page, "backend_layout") == 5]
    // Your settings go here
[END]
[traverse(page, "backend_layout") == "example_layout"]
    // Your settings go here
[END]

# Check the page title
[traverse(page, "title") == "foo"]
    // Your settings go here
[END]
Copied!

tree

tree
Type
Object

Object with tree information. Only available in page TSconfig, not in user TSconfig.

tree.level

tree.level
Type
integer

Current tree level. Only available in page TSconfig, not in user TSconfig.

Example: Condition applies on a page with level 0

EXT:site_package/Configuration/page.tsconfig
# Check if page is on level 0:
[tree.level == 0]
    // Your settings go here
[END]
Copied!

tree.pagelayout

tree.pagelayout
Type
integer / string

Check for the defined backend layout of a page including the inheritance of the field Backend Layout (subpages of this page). Only available in page TSconfig, not in user TSconfig.

Example: Condition applies on pages with a certain backend layout

EXT:site_package/Configuration/page.tsconfig
# Use backend_layout records uids
[tree.pagelayout == 2]
    // Your settings go here
[END]

# Use TSconfig provider of backend layouts
[tree.pagelayout == "pagets__Home"]
    // Your settings go here
[END]
Copied!

tree.rootLine

tree.rootLine
Type
array

An array of arrays with uid and pid. Only available in page TSconfig, not in user TSconfig.

Example: Condition applies on all subpages of page

EXT:site_package/Configuration/page.tsconfig
[tree.rootLine[0]["uid"] == 1]
    // Your settings go here
[END]
Copied!

tree.rootLineIds

tree.rootLineIds
Type
array

An array with UIDs of the root line. Only available in page TSconfig, not in user TSconfig.

Example: Condition applies if a page is in the root line

EXT:site_package/Configuration/page.tsconfig
# Check if page with uid 2 is inside the root line
[2 in tree.rootLineIds]
    // Your settings go here
[END]
Copied!

tree.rootLineParentIds

tree.rootLineParentIds
Type
array

An array with parent UIDs of the root line. Only available in page TSconfig, not in user TSconfig.

Example: Condition applies if a page's parent is in the root line

EXT:site_package/Configuration/page.tsconfig
# Check if page with uid 2 is the parent of a page inside the root line
[2 in tree.rootLineParentIds]
    // Your settings go here
[END]
Copied!

backend

backend
Type
Object

Object with backend information.

backend.user

backend.user
Type
Object

Object with current backend user information.

backend.user.isAdmin

backend.user.isAdmin
Type
boolean

True if current user is admin.

Example: Condition applies if the current backend user is an admin

EXT:site_package/Configuration/page.tsconfig
# Evaluates to true if current backend user is administrator
[backend.user.isAdmin]
    // Your settings go here
[END]
Copied!

backend.user.isLoggedIn

backend.user.isLoggedIn
Type
boolean

True if current user is logged in.

Example: Condition applies if any backend user is logged in

EXT:site_package/Configuration/page.tsconfig
[backend.user.isLoggedIn]
    // Your settings go here
[END]
Copied!

backend.user.userId

backend.user.userId
Type
integer

UID of current user.

Example: Condition applies if a certain backend user is logged in

EXT:site_package/Configuration/page.tsconfig
# Evaluates to true if user uid of current logged in backend user is equal to 5
[backend.user.userId == 5]
    // Your settings go here
[END]
Copied!

backend.user.userGroupIds

backend.user.userGroupList
Type
array

array of user group IDs of the current backend user.

Example: Condition applies if a backend user of a certain group is logged in

EXT:site_package/Configuration/page.tsconfig
[2 in backend.user.userGroupIds]
    // Your settings go here
[END]
Copied!

backend.user.userGroupList

backend.user.userGroupList
Type
string

Comma list of group UIDs

Example: Condition applies if the groups of a user meet a certain pattern

EXT:site_package/Configuration/page.tsconfig
[like(","~backend.user.userGroupList~",", "*,1,*")]
    // Your settings go here
[END]
Copied!

workspace

workspace
Type
Object

object with workspace information

workspace.workspaceId

.workspaceId
Type
integer

UID of current workspace.

Example: Condition applies only in a certain workspace

EXT:site_package/Configuration/page.tsconfig
[workspace.workspaceId == 0]
    // Your settings go here
[END]
Copied!

workspace.isLive

workspace.isLive
Type
boolean

True if current workspace is live.

Example: Condition applies only in live workspace

EXT:site_package/Configuration/page.tsconfig
[workspace.isLive]
    // Your settings go here
[END]
Copied!

workspace.isOffline

workspace.isOffline
Type
boolean

True if current workspace is offline

Example: Condition applies only in offline workspace

EXT:site_package/Configuration/page.tsconfig
[workspace.isOffline]
    // Your settings go here
[END]
Copied!

typo3

typo3
Type
Object

Object with TYPO3 related information

typo3.version

typo3.version
Type
string

TYPO3 version (e.g. 12.4.0-dev)

Example: Condition only applies in an exact TYPO3 version like 12.4.0

EXT:site_package/Configuration/page.tsconfig
[typo3.version == "12.4.0"]
    // Your settings go here
[END]
Copied!

typo3.branch

typo3.branch
Type
string

TYPO3 branch (e.g. 12.4)

Example: Condition applies in all TYPO3 versions of a branch like 12.4

EXT:site_package/Configuration/page.tsconfig
[typo3.branch == "12.4"]
    // Your settings go here
[END]
Copied!

typo3.devIpMask

typo3.devIpMask
Type
string

$GLOBALS['TYPO3_CONF_VARS']['SYS']['devIPmask']

Example: Condition only applies if the devIpMask is set to a certain value

EXT:site_package/Configuration/page.tsconfig
[typo3.devIpMask == "203.0.113.6"]
    // Your settings go here
[END]
Copied!

Condition functions available in TSconfig

date()

date([parameter])
Type
integer
Parameter
[parameter]: string / integer

Get current date in given format. See PHP date function as reference for possible usage.

Example: Condition applies at certain dates or times

EXT:site_package/Configuration/page.tsconfig
# True if day of current month is 7
[date("j") == 7]
    // Your settings go here
[END]

# True if day of current week is 7
[date("w") == 7]
    // Your settings go here
[END]

# True if day of current year is 7
[date("z") == 7]
    // Your settings go here
[END]

# True if current hour is 7
[date("G") == 7]
    // Your settings go here
[END]
Copied!

like()

like([search-string], [pattern])
Type
boolean
parameter
[search-string] : string; [pattern]: string

This function has two parameters: The first parameter is the string to search in, the second parameter is the search string.

Example: Use the "like()" function in conditions

EXT:site_package/Configuration/page.tsconfig
# Search a string with * within another string
[like("fooBarBaz", "*Bar*")]
    // Your settings go here
[END]

# Search string with single characters in between, using ?
[like("fooBarBaz", "f?oBa?Baz")]
    // Your settings go here
[END]

# Search string using regular expression
[like("fooBarBaz", "/f[o]{2,2}[aBrz]+/")]
    // Your settings go here
[END]
Copied!

traverse()

traverse([array], [key])
Type
any
Parameter
[array]: array; [key]: string or integer

This function gets a value from an array with arbitrary depth and suppresses PHP warning when sub arrays do not exist. It has two parameters: The first parameter is the array to traverse, the second parameter is the path to traverse.

In case the path is not found in the array, an empty string is returned.

Example: Condition applies if request parameter matches a certain value

EXT:site_package/Configuration/page.tsconfig
# Traverse query parameters of current request along tx_news_pi1[news]
[traverse(request.getQueryParams(), 'tx_news_pi1/news') > 0]
    // Your settings go here
[END]
Copied!

compatVersion()

compatVersion([version-pattern])
Type
boolean
Parameter
[version-pattern]: string

Compares against the current TYPO3 branch.

Example: Condition applies if the current TYPO3 version matches a pattern

EXT:site_package/Configuration/page.tsconfig
# True if current version is 12.4.x
[compatVersion("12.4")]
    // Your settings go here
[END]
[compatVersion("12.4.0")]
    // Your settings go here
[END]
[compatVersion("12.4.1")]
    // Your settings go here
[END]
Copied!

getenv()

getenv([enviroment_variable])
Type
string
Parameter
[enviroment_variable]: string

PHP function getenv.

Example: Condition applies if the virtual host is set to a certain value

EXT:site_package/Configuration/page.tsconfig
[getenv("VIRTUAL_HOST") == "www.example.org"]
    // Your settings go here
[END]
Copied!

feature()

feature([feature_key])
Type
any
Parameter
[feature_key]: string

Provides access to feature toggles current state.

Example: condition applies if a feature toggle is enabled

EXT:site_package/Configuration/page.tsconfig
# True if feature toggle for strict TypoScript syntax is enabled:
[feature("TypoScript.strictSyntax") === false]
    // Your settings go here
[END]
Copied!

site()

site([keyword])
Type
string
Parameter
[keyword]: string

Get value from site configuration, or null if no site was found or property does not exists. Only available in page TSconfig, not available in user TSconfig. Available Information:

site("identifier")
Returns the identifier of current site as string.
site("base")
Returns the base of current site as string.
site("rootPageId")
Returns the root page uid of current site as integer.
site("languages")
Returns array of available languages for current site. For deeper information, see siteLanguage().
site("allLanguages")
Returns array of available and unavailable languages for current site. For deeper information, see siteLanguage().
site("defaultLanguage")
Returns the default language for current site. For deeper information, see siteLanguage().
site("configuration")
Returns an array with all available configuration for current site.

Example: Condition applies if a certain value is set in the site configuration

EXT:site_package/Configuration/page.tsconfig
# Site identifier
[site("identifier") == "my_website"]
    // Your settings go here
[END]

# Match site base host
[site("base").getHost() == "www.example.org"]
    // Your settings go here
[END]

# Match base path
[site("base").getPath() == "/"]
    // Your settings go here
[END]

# Match root page uid
[site("rootPageId") == 1]
    // Your settings go here
[END]

# Match a configuration property
[traverse(site("configuration"), "myCustomProperty") == true]
    // Your settings go here
[END]
Copied!

PHP API

Retrieving TSconfig settings

The PHP API to retrieve page and user TSconfig in a backend module can be used as follows:

EXT:my_sitepackage/Classes/Controller/MyBackendController.php
<?php

declare(strict_types=1);

use TYPO3\CMS\Backend\Utility\BackendUtility;
use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;

final class MyBackendController
{
    public function someMethod(int $currentPageId): void
    {
        // Retrieve user TSconfig of currently logged in user
        $userTsConfig = $this->getBackendUser()->getTSConfig();

        // Retrieve page TSconfig of the given page id
        $pageTsConfig = BackendUtility::getPagesTSconfig($currentPageId);
    }

    private function getBackendUser(): BackendUserAuthentication
    {
        return $GLOBALS['BE_USER'];
    }
}
Copied!

Both methods return the entire TSconfig as a PHP array. The former retrieves the user TSconfig while the latter retrieves the page TSconfig.

All imports, overrides, modifications, etc. are already resolved. This includes page TSconfig overrides by user TSconfig.

Similar to other TypoScript-related API methods, properties that contain sub-properties return their sub-properties using the property name with a trailing dot, while a single property is accessible by the property name itself. The example below gives more insight on this.

If accessing TSconfig arrays, the PHP null coalescing operator ?? is useful: TSconfig options may or not be set, accessing non-existent array keys in PHP would thus raise PHP notice level warnings.

Combining the array access with a fallback using ?? helps when accessing these optional array structures.

Incoming (user) TSconfig:
options.someToggle = 1
options.somePartWithSubToggles = foo
options.somePartWithSubToggles.aValue = bar
Copied!
Parsed array returned by getTSConfig(), note the dot if a property has sub keys:
<?php

return [
    'options.' => [
        'someToggle' => '1',
        'somePartWithSubToggles' => 'foo',
        'somePartWithSubToggles.' => [
            'aValue' => 'bar',
        ],
    ],
];
Copied!
Example how to read user TSconfig
<?php

declare(strict_types=1);

final class _MyBackendLoggedInController
{
    public function isUserToggleEnabled(): bool
    {
        // Typical call to retrieve a sanitized value:
        return $isToggleEnabled = (bool)($this->getUserTsConfig()['options.']['someToggle'] ?? false);
    }

    public function getSomePartWithSubToggles(): array
    {
        // Retrieve a subset, note the dot at the end:
        return $this->getUserTsConfig()['options.']['somePartWithSubToggles.'] ?? [];
    }

    private function getUserTsConfig(): array
    {
        return $GLOBALS['BE_USER']->getTSConfig();
    }
}
Copied!

Changing or adding page TSconfig

The PSR-14 event ModifyLoadedPageTsConfigEvent is available to modify or add page TSconfig entries.

Page TSconfig Reference

The page TSconfig primarily concerns configuration of the modules in the TYPO3 backend, the most important section is mod.

The TSconfig for a page is accumulated from the root and extends to cover the whole branch of sub pages as well (unless values are overridden further out).

Note that the page TSconfig can be overridden on a user and group basis by user TSconfig again, for details, see section Overriding page TSconfig in user TSconfig.

colorPalettes

New in version 13.0

TYPO3 provides a color picker component that supports color palettes, or swatches. The colors can be configured and assigned to palettes. This way, for example, colors defined in a corporate design can be selected by a simple click. Multiple color palettes can be configured.

Example of a color palette

Example of a color palette

Basic syntax

First, define the colors by name and RGB value:

EXT:my_sitepackage/Configuration/page.tsconfig
colorPalettes {
  colors {
    typo3 {
      value = #ff8700
    }
    blue {
      value = #0080c9
    }
    darkgrey {
      value = #515151
    }
    valid {
      value = #5abc55
    }
    error {
      value = #dd123d
    }
  }
}
Copied!

Then assign the colors to your palettes:

EXT:my_sitepackage/Configuration/page.tsconfig
colorPalettes {
  palettes {
    main = typo3
    key_colors = typo3, blue, darkgrey
    messages = valid, error
  }
}
Copied!

Now you can assign a color palette to one field, to all fields of a table or as a global configuration, see TCEFORM.colorPalette.

SHARED

colPos_list

colPos_list
Type
list of integers
Default
1,0,2,3

This option lets you specify which columns of tt_content elements should be editable in the 'Columns' view of the Web > Page module.

Used on top of backend layouts, this setting controls which columns are editable. Columns configured in the Backend Layout which are not listed here, will be displayed with placeholder area.

Each column has a number which ultimately comes from the configuration of the table tt_content, field 'colPos'. These are the values of the four default columns used in the default backend layout:

Left: 1, Normal: 0, Right: 2, Border: 3

Example: Create a basic backend layout

The example creates a basic backend layout and sets the "Left" column to be not editable:

  • Create a record of type "Backend Layout", for instance in the root page of your website
  • Add a title, e.g. "My Layout"
  • Use the wizard to create a two column backend layout, the result may look like this:

    A simple backend layout

    A simple backend layout

  • Create a page and select this new backend layout in the "Appearance" tab. The page module then looks like this, displaying the two defined columns:

    Backend layout used in page module

    Backend layout used in page module

  • Now set the "Left" column to be not editable using page TSconfig in the Resources tab of the page, by restricting colPos_list to 0 (the "Content" columns as defined above):

    Page TSconfig in the "Resources" tab of the page
    mod.SHARED.colPos_list = 0
    Copied!
  • The result in the page module then looks like this:

    One column not editable in a backend layout

    One column not editable in a backend layout

defaultLanguageFlag

defaultLanguageFlag
Type
string

Country flag shown for the "Default" language in the backend, used in Web > List and Web > Page module. Values as listed in the "Select flag icon" of a language record in the backend are allowed, including the value "multiple".

The flag selector of a language record in the backend

The flag selector of a language record in the backend

Example: Show a German flag on a NullSite

This will show the German flag, and the text "deutsch" on hover.

EXT:site_package/Configuration/page.tsconfig
mod.SHARED {
    defaultLanguageFlag = de
    defaultLanguageLabel = deutsch
}
Copied!

defaultLanguageLabel

defaultLanguageLabel
Type
string

Alternate label for "Default" when language labels are shown in the interface.

Used in Web > List and Web > Page module.

disableLanguages

disableLanguages
Type
string

Comma-separated list of language UIDs which will be disabled in the given page tree.

disableSysNoteButton

disableSysNoteButton
Type
boolean

Disables the sys_note creation button in the modules' top button bar in the Page, List and Info modules.

web_info

Configuration options of the "Web > Info" module.

fieldDefinitions

fieldDefinitions
Type
array

The available fields in the "Pagetree overview" module under the Info module, by default ship with the entries "Basic settings", "Record overview", and "Cache and age".

Default entries of Pagetree Overview

Default entries of Pagetree Overview

By using page TsConfig it is possible to change the available fields and add additional entries to the select box.

Next to using a list of fields from the pages table you can add counters for records in a given table by prefixing a table name with table_ and adding it to the list of fields.

The string ###ALL_TABLES### is replaced with a list of all table names an editor has access to.

Example: Override the field definitions in the info module

EXT:site_package/Configuration/page.tsconfig
mod.web_info.fieldDefinitions {
    0 {
        # Basic settings
        label = LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:pages_0
        fields = title,uid,slug,alias,starttime,endtime,fe_group,target,url,shortcut,shortcut_mode
    }
    1 {
        # Record overview
        label = LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:pages_1
        fields = title,uid,###ALL_TABLES###
    }
    2 {
        # Cache and age
        label = LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:pages_2
        fields = title,uid,table_tt_content,table_fe_users
    }
}
Copied!

web_layout

Configuration options of the "Web > Page" module.

allowInconsistentLanguageHandling

allowInconsistentLanguageHandling
Type
boolean

By default, TYPO3 will not allow you to mix translated content and independent content in the page module. Content elements violating this behavior will be marked in the page module and there is no UI control (yet) allowing you to create independent content elements in a given language.

If you want to go back to the old, inconsistent behavior, you can toggle it back on using this switch.

Example: Allow inconsistent language modes

Allows to set TYPO3s page module back to inconsistent language mode

EXT:site_package/Configuration/page.tsconfig
mod.web_layout.allowInconsistentLanguageHandling = 1
Copied!

BackendLayouts

BackendLayouts
Type
array
no-index
1

Backend Layouts were initially introduced in order to customize the view of the Page module in TYPO3 Backend for a page, but has then since grown also in Frontend rendering to select for example Fluid template files via TypoScript for a page, commonly used via data:pagelayout.

See also the dedicated chapter Backend layouts.

Example: Define a backend layout

EXT:site_package/Configuration/page.tsconfig
mod.web_layout.BackendLayouts {
    exampleKey {
        title = Example
        icon = EXT:example_extension/Resources/Public/Images/BackendLayouts/default.gif
        config {
            backend_layout {
                colCount = 1
                rowCount = 2
                rows {
                    1 {
                        columns {
                            1 {
                                name = LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:colPos.I.3
                                colPos = 3
                                colspan = 1
                            }
                        }
                    }
                    2 {
                        columns {
                            1 {
                                name = Main
                                colPos = 0
                                colspan = 1
                                identifier = main
                            }
                        }
                    }
                }
            }
        }
    }
}
Copied!

defaultLanguageLabel

defaultLanguageLabel
Type
string

Alternate label for "Default" when language labels are shown in the interface.

Overrides the same property from mod.SHARED if set.

defLangBinding

defLangBinding
Type
boolean
Default
0

If set, translations of content elements are bound to the default record in the display. This means that within each column with content elements any translation found for exactly the shown default content element will be shown in the language column next to.

This display mode should be used depending on how the frontend is configured to display localization. The frontend must display localized pages by selecting the default content elements and for each one overlay with a possible translation if found.

hideRestrictedCols

hideRestrictedCols
Type
boolean
Default
false

If activated, only columns will be shown in the backend that the editor is allowed to access. All columns with access restriction are hidden in that case.

By default columns with restricted access are rendered with a message telling that the user doesn't have access. This may be useless and distracting or look repelling. Instead, all columns an editor doesn't have access to can be hidden:

EXT:site_package/Configuration/page.tsconfig
mod.web_layout.hideRestrictedCols = 1
Copied!

localization.enableCopy

localization.enableCopy
Type
boolean
Default
1

Enables the creation of copies of content elements into languages in the translation wizard ("free mode").

Example: Disable free mode button for localization

EXT:site_package/Configuration/page.tsconfig
mod.web_layout {
    localization.enableCopy = 0
}
Copied!

localization.enableTranslate

localization.enableTranslate
Type
boolean
Default
1

Enables simple translations of content elements in the translation wizard ("connected mode").

Example: Disable "connected mode" button for translation

EXT:site_package/Configuration/page.tsconfig
mod.web_layout {
    localization.enableTranslate = 0
}
Copied!

tt_content.preview

tt_content.preview
Type
boolean

It is possible to render previews of your own content elements in the page module. By referencing a Fluid template you can create a visual representation of your content element, making it easier for an editor to understand what is going on on the page.

The syntax is as follows:

EXT:site_package/Configuration/page.tsconfig
mod.web_layout.tt_content.preview.[CTYPE].[list_type value] = EXT:site_mysite/Resources/Private/Templates/Preview/ExamplePlugin.html
Copied!

This way you can even switch between previews for your plugins by supplying list as CType.

Example: Define previews for custom content elements

EXT:site_package/Configuration/page.tsconfig
mod.web_layout.tt_content {
    preview.custom_ce = EXT:site_mysite/Resources/Private/Templates/Preview/CustomCe.html
    preview.table = EXT:site_mysite/Resources/Private/Templates/Preview/Table.html
    preview.list.tx_news = EXT:site_mysite/Resources/Private/Templates/Preview/TxNews.html
}
Copied!

Backend layouts

Backend layouts were initially introduced in order to customize the view of the Page module in TYPO3 Backend for a page, but has then since grown also in Frontend rendering to select for example Fluid template files via TypoScript for a page, commonly used via data:pagelayout.

A page module with a backend layout that has 3 content areas.

Backend layouts are organized in rows and columns. Content areas can span multiple rows and or columns. They cannot be nested. For nested layouts in the backend use an extension like b13/container .

The page TSconfig for the backend layout above can be found in the site package tutorial: Create the backend page layouts.

For extended examples have a look at the predefined backend layouts of the bootstrap package (GitHub).

BackendLayouts.[backendLayout]
Type
array
Path
mod.web_layout.BackendLayouts
title
Type
string or language identifier

The title of the backend layout. It will be displayed in the page properties in the backend.

icon
Type
string, extension path to an image file

The icon to be displayed in the page properties.

EXT:bootstrap_package/Configuration/TsConfig/Page/Mod/WebLayout/BackendLayouts/subnavigation_right_2_columns.tsconfig
mod.web_layout.BackendLayouts.subnavigation_right_2_columns {
    icon = EXT:bootstrap_package/Resources/Public/Icons/BackendLayouts/subnavigation_right_2_columns.svg
}
Copied!
config.backend_layout
colCount
Type
integer

Total number of columns in the backend layout.

rowCount
Type
integer

Total number of rows in the backend layout.

rows.[row].columns.[col]
name
Type
string or language identifier

Name of the input area where content elements can be added. Will be displayed in the Page module.

colPos
Type
integer, 0 - maxInt

When content elements are added to this area, the value of colPos

identifier
Type
string

An identifier that can be used by the page content DataProcessor to identify the content elements within this area.

It is a speaking representation for the colPos, such as "main", "sidebar" or "footerArea".

slideMode
Type
string, "" (empty string), "slide", "collect", "collectReverse"

An identifier that can be used by the page content DataProcessor to identify the content elements within this area.

slide
If no content is found, check the parent pages for more content
collect
Use all content from this page, and the parent pages as one collection
collectReverse
Same as "collect" but in the opposite order
colspan
Type
integer, 1 - colCount

Can be used if the content element area should span multiple columns as for the "Jumbotron" example in the example above.

rowspan
Type
integer, 1 - rowCount

Can be used if the content element area should span multiple rows.

Example: Use a backend layout in the page content data processor

Define the backend layout via page TSconfig, for example in the site:

config/sites/my-site/page.tsconfig
mod.web_layout.BackendLayouts {
    default {
        title = Default
        config {
            backend_layout {
                colCount = 2
                rowCount = 2
                rows {
                    1 {
                        columns {
                            1 {
                                name = Jumbotron
                                colPos = 1
                                identifier = jumbotron
                                slideMode = slide
                                colspan = 2
                            }
                        }
                    }

                    1 {
                        columns {
                            1 {
                                name = Left
                                colPos = 0
                                identifier = left
                            }

                            2 {
                                name = Right
                                colPos = 2
                                identifier = right
                                slideMode = collectReverse
                            }
                        }
                    }
                }
            }
        }
    }
}
Copied!

Configure the output via TypoScript, using the content object PAGEVIEW and the DataProcessor page-content.

config/sites/my-site/setup.typoscript
page = PAGE
page {
    10 = PAGEVIEW
    10 {
        paths.10 = EXT:my_sitepackage/Resources/Private/Templates/
        dataProcessing.10 = page-content
        dataProcessing.10.as = myContent
    }
}
Copied!

Use the identifiers of the columns in the Fluid template:

EXT:my_sitepackage/Resources/Private/Templates/Pages/Default.html
<f:render partial="Jumbotron" arguments="{jumbotronContent: myContent.jumbotron}"/>
<main>
    <f:for each="{myContent.left.records}" as="contentElement">
        <f:cObject typoscriptObjectPath="tt_content.{contentElement.data.CType}"
            data="{contentElement.data}"
            table="tt_content"
        />
    </f:for>
</main>
<aside>
    <f:render partial="Aside" arguments="{content: myContent.right}"/>
</aside>
Copied!

web_list

Configuration options of the "Web > List" module.

allowedNewTables

allowedNewTables
Type
list of table names

If this list is set, then only tables listed here will have a link to "create new" in the page and sub pages. This also affects the "Create new record" content element wizard.

This is the opposite of deniedNewTables property.

Example: Only allow records of type pages or sys_category in the new record wizard

EXT:site_package/Configuration/page.tsconfig
mod.web_list {
    # Only pages and sys_category table elements will be linked to in the new record wizard
    allowedNewTables = pages, sys_category
}
Copied!
The New record screen after modifying the allowed elements

The New record screen after modifying the allowed elements

clickTitleMode

clickTitleMode
Type
string
Default
edit

Keyword which defines what happens when a user clicks a record title in the list.

The following values are possible:

edit
Edits record
info
Shows information
show
Shows page in the frontend

csvDelimiter

csvDelimiter
Type
string
Default
,

Defines the default delimiter for CSV downloads (Microsoft Excel expects ; to be set). The value set will be displayed as default delimiter in the download dialog in the list module.

Example: Use semicolon as delimiter CSV downloads

EXT:examples/Configuration/TsConfig/Page/Mod/csvExport.tsconfig
mod.web_list {
   csvDelimiter = ;
   csvQuote = '
}
Copied!

csvQuote

csvQuote
Type
string
Default
"

Defines the default quoting character for CSV downloads. The value set will be displayed as default quoting in the download dialog in the list module.

Example: Use single quotes as quoting character for CSV downloads

EXT:examples/Configuration/TsConfig/Page/Mod/csvExport.tsconfig
mod.web_list {
   csvDelimiter = ;
   csvQuote = '
}
Copied!

deniedNewTables

deniedNewTables
Type
list of table names

If this list is set, then the tables listed here won't have a link to "create new record" in the page and sub pages. This also affects the "Create new record" content element wizard.

This is the opposite of allowedNewTables property.

If allowedNewTables and deniedNewTables contain a common subset, deniedNewTables takes precedence.

disableSingleTableView

disableSingleTableView
Type
boolean

If set, then the links on the table titles which shows a single table listing will not be available - including sorting links on columns titles, because these links jumps to the table-only view.

displayColumnSelector

displayColumnSelector
Type
boolean
Default
true

The column selector is enabled by default and can be disabled with this option. The column selector is displayed at the top of each record list in the List module. It can be used to compare different fields of the listed records.

Example: Hide the column selector

EXT:site_package/Configuration/page.tsconfig
mod.web_list.displayColumnSelector = 0
Copied!

downloadPresets

downloadPresets.[table]
Type
array of presets

New in version 13.2

A new function has been introduced that makes it possible to select the data columns to be exported from a list of configurable presets.

This property adds presets of preselected fields to the download area in the Web > List backend module.

Those presets can be configured via page TSconfig, and can also be overridden via user TSconfig (for example, to expand certain presets only to specific users).

Each entry of mod.web_list.downloadPresets defines the table name on the first level, followed by any number of presets.

Each preset contains a label (the displayed name of the preset, which can be a locallang key), a comma-separated list of each column that should be included in the export as columns and optionally an identifier. In case identifier is not provided, the identifier is generated as hash of the label and columns.

Since any table can be configured for a preset, any extension can deliver a defined set of presets through the EXT:my_extension/Configuration/page.tsconfig file and their table name(s).

Additionally, the list of presets can be manipulated via the PSR-14 event BeforeRecordDownloadPresetsAreDisplayedEvent.

Example: Create download presets for table page

EXT:my_extension/Configuration/page.tsconfig
mod.web_list.downloadPresets {
    pages {
        minimum {
            label = Quick overview
            columns = uid, title, crdate, slug
        }

        fullExport {
            identifier = uid-title
            label = LLL:EXT:myext/Resources/Private/Language/locallang.xlf:preset2.label
            columns = uid, title
        }
    }
}
Copied!

This can be manipulated with user TSconfig by adding the page. prefix. User TSconfig is loaded after page TSconfig, so you can overwrite the existing default settings using the same TypoScript path.

EXT:my_extension/Configuration/user.tsconfig
mod.web_list.downloadPresets {
    pages {
        minimum {
            label = Quick overview
            columns = uid, title, crdate, slug
        }

        fullExport {
            identifier = uid-title
            label = LLL:EXT:myext/Resources/Private/Language/locallang.xlf:preset2.label
            columns = uid, title
        }
    }
}
Copied!

enableClipBoard

enableClipBoard
Type
list of keywords
Default
selectable

Determines whether the checkbox "Show clipboard" in the list module is shown or hidden. If it is hidden, you can predefine it to be always activated or always deactivated.

The following values are possible:

activated
The option is activated and the checkbox is hidden.
deactivated
The option is deactivated and the checkbox is hidden.
selectable
The checkbox is shown so that the option can be selected by the user.

enableDisplayBigControlPanel

Changed in version 11.3

The checkbox Extended view was removed with TYPO3 v11.3. Therefore the option mod.web_list.enableDisplayBigControlPanel has no effect anymore.

hideTables

hideTables
Type
list of table names, or *

Hide these tables in record listings (comma-separated)

If * is used, all tables will be hidden

hideTranslations

hideTranslations
Type
list of table names, or *

For tables in this list all their translated records in additional website languages will be hidden in the List module.

Use * to hide all records of additional website languages in all tables or set single table names as comma-separated list.

Example: Hide all translated records

EXT:site_package/Configuration/page.tsconfig
mod.web_list.hideTranslations = *
Copied!

Example: Hide translated records in tables tt_content and tt_news

EXT:site_package/Configuration/page.tsconfig
mod.web_list.hideTranslations = tt_content, tt_news
Copied!

itemsLimitPerTable

itemsLimitPerTable
Type
positive integer
Default
20 Set the default maximum number of items to show per table. The number must be between 5 and 10000`. If below or above this range, the nearest valid number will be used.

Example: Limit items per table in overview to 10

EXT:site_package/Configuration/page.tsconfig
mod.web_list {
    itemsLimitPerTable = 10
}
Copied!

itemsLimitSingleTable

itemsLimitSingleTable
Type
positive integer
Default
100

Set the default maximum number of items to show in single table view. The number must be between 5 and 10000. If below or above this range, the nearest valid number will be used.

Example: Limit items in single table view to 10

EXT:site_package/Configuration/page.tsconfig
mod.web_list {
    itemsLimitSingleTable = 10
}
Copied!

listOnlyInSingleTableView

listOnlyInSingleTableView
Type
boolean
Default
0

If set, the default view will not show the single records inside a table anymore, but only the available tables and the number of records in these tables. The individual records will only be listed in the single table view, that means when a table has been clicked. This is very practical for pages containing many records from many tables!

Example: Only list records of tables in single-table mode

EXT:site_package/Configuration/page.tsconfig
mod.web_list {
    listOnlyInSingleTableView = 1
}

The result will be that records from tables are only listed in the single-table mode:
Copied!
The list module after activating the single-table mode

The list module after activating the single-table mode

newPageWizard.override

newPageWizard.override
Type
string

If set to an extension key, then the specified module or route will be used for creating new elements on the page.

noViewWithDokTypes

noViewWithDokTypes
Type
string (comma-separated list of integers)
Default
254,255

Hide view icon for the defined doktypes.

table.[tableName].hideTable

table.[tableName].hideTable
Type
boolean
Default
0

If set to non-zero, the table is hidden. If it is zero, table is shown even if table name is listed in "hideTables" list.

Example: Hide table tt_content

EXT:site_package/Configuration/page.tsconfig
mod.web_list.table.tt_content.hideTable = 1
Copied!

table.[tableName].displayColumnSelector

table.[tableName].displayColumnSelector
Type
boolean

If set to false, the column selector in the title row of the specified table gets hidden. If the column selctors have been disabled globally this option can be used to enable it for a specific table.

Example: Hide the column selector for tt_content

EXT:site_package/Configuration/page.tsconfig
mod.web_list.table.tt_content.displayColumnSelector = 0
Copied!

Example: Hide the column selector for all tables but sys_category

EXT:site_package/Configuration/page.tsconfig
mod.web_list.displayColumnSelector = 0
mod.web_list.table.sys_category.displayColumnSelector = 1
Copied!

tableDisplayOrder

tableDisplayOrder.[tableName]
Type
array

Flexible configuration of the order in which tables are displayed.

The keywords before and after can be used to specify an order relative to other table names.

mod.web_list.tableDisplayOrder.<tableName> {
    before = <tableA>, <tableB>, ...
    after = <tableA>, <tableB>, ...
}
Copied!

searchLevel.items

searchLevel.items
Type
array

Sets labels for each level label in the search level select box

EXT:site_package/Configuration/page.tsconfig
mod.web_list.searchLevel.items {
    -1 = EXT:core/Resources/Private/Language/locallang_core.xlf:labels.searchLevel.infinite
    0 = EXT:core/Resources/Private/Language/locallang_core.xlf:labels.searchLevel.0
    1 = EXT:core/Resources/Private/Language/locallang_core.xlf:labels.searchLevel.1
    2 = EXT:core/Resources/Private/Language/locallang_core.xlf:labels.searchLevel.2
    3 = EXT:core/Resources/Private/Language/locallang_core.xlf:labels.searchLevel.3
    4 = EXT:core/Resources/Private/Language/locallang_core.xlf:labels.searchLevel.4
}
Copied!

searchLevel.default

searchLevel.default
Type
integer

New in version 13.2

This option allows to define one of the available level options as the default level to use.

When searching for records in the Web > List module as well as the database browser, it is possible to select the search levels (page tree levels to respect in the search).

An editor is therefore able to select between the current page, a couple of defined levels (e.g. 1, 2, 3) as well as the special "infinite levels".

Those options can already be extended using the TSconfig option searchLevel.items.

Example: Set the default search level to "infinite levels"

EXT:my_sitepackage/Configuration/page.tsconfig
mod.web_list.searchLevel.default = -1
Copied!

web_view

Configuration options of the "Web > View" module.

previewFrameWidths

previewFrameWidths
Type
array

Configure available presets in view module.

<key>.label
Label for the preset
<key>.type
Category of the preset, must be one of 'desktop', 'tablet' or 'mobile'
<key>.width
Width of the preset
<key>.height
Height of the preset

Example: Define a new preview preset

With this configuration a new preset '1014' with size 1024x768 will be configured with a label loaded from an xlf file and the category 'desktop'.

EXT:site_package/Configuration/page.tsconfig
mod.web_view.previewFrameWidths {
    1024.label = LLL:EXT:viewpage/Resources/Private/Language/locallang.xlf:computer
    1024.type = desktop
    1024.width = 1024
    1024.height = 768
}
Copied!
Dropdown menu Width with added frame size called myPreview

Dropdown menu Width with added frame size called myPreview

type

type
Type
positive integer

Enter the value of the &type= parameter passed to the webpage.

Example: Show pages of type 42 in the preview

EXT:site_package/Configuration/page.tsconfig
mod.web_view {
    # Frontend link will be something like index.php?id=123&type=42
    type = 42
}
Copied!

wizards

The wizards section allows to customize the New record wizard and the New content element wizard.

newContentElement.wizardItems

Changed in version 13.0

New content elements added via TCA to the items of field CType of table tt_content are automatically added to the New Content Element Wizard. The following page TSconfig can be used to override values set via TCA.

newContentElement.wizardItems
Type
array
Path
mod.wizards.newContentElement.wizardItems

In the New Content Element Wizard, content element types are grouped together by type. Each such group can be configured independently. The four default groups are: default, special, forms and plugins.

Changed in version 13.0

The group common was renamed to default. A permanent migration is in place.

removeItems
Type
comma separated list of groups
Path
mod.wizards.newContentElement.wizardItems.removeItems

Changed in version 13.0

With this setting one or several groups with all their content elements can be hidden in the New Content Element Wizard.

# This will remove the "menu" group
mod.wizards.newContentElement.wizardItems.removeItems := addToList(menu)
Copied!
[group].before
Type
string
Path
mod.wizards.newContentElement.wizardItems.[group].before

Sorts [group] in front of the group given.

[group].after
Type
string
Path
mod.wizards.newContentElement.wizardItems.[group].after

Sorts [group] after the group given.

[group].header
Type
string | localized string
Path
mod.wizards.newContentElement.wizardItems.[group].header

Name of the group.

[group].show
Type
string, comma-separated list of items
Path
mod.wizards.newContentElement.wizardItems.[group].show

Changed in version 13.0

The configuration of the New Content Element Wizard has been changed to automatically registering the groups and elements from the TCA configuration.

The previously used option to show / hide elements mod.wizards.newContentElement.wizardItems.<group>.show is not evaluated anymore.

All configured groups and elements are automatically shown. Removing these groups and elements from the New Content Element Wizard can be done via the option removeItems and [group].removeItems options.

[group].elements
Type
array
Path
mod.wizards.newContentElement.wizardItems.[group].elements

List of items in the group.

[name]
Type
array
Path
mod.wizards.newContentElement.wizardItems.[group].elements.[name]

Configuration for a single item.

iconIdentifier
Type
string
Path
mod.wizards.newContentElement.wizardItems.[group].elements.[name].iconIdentifier

The icon identifier of the icon you want to display.

iconOverlay
Type
string
Path
mod.wizards.newContentElement.wizardItems.[group].elements.[name].iconOverlay

The icon identifier of the overlay icon you want to use.

title
Type
string | localized string
Path
mod.wizards.newContentElement.wizardItems.[group].elements.[name].title

Name of the item.

description
Type
string | localized string
Path
mod.wizards.newContentElement.wizardItems.[group].elements.[name].description

Description text for the item.

tt_content_defValues
Type
array
Path
mod.wizards.newContentElement.wizardItems.[group].elements.[name].tt_content_defValues

Default values for tt_content fields.

saveAndClose
Type
bool
Path
mod.wizards.newContentElement.wizardItems.[group].elements.[name].saveAndClose
Default
false

If true, directs the user back to the Page module directly instead of showing the FormEngine.

[group].removeItems
Type
Comma separated list
Path
mod.wizards.newContentElement.wizardItems.[group].removeItems

Changed in version 13.0

Comma separated list of content elements that should be hidden in [group].

EXT:site_package/Configuration/page.tsconfig
mod.wizards.newContentElement.wizardItems {
    special.removeItems := addToList(html)
}
Copied!

Example: Add a new element to the "common" group

EXT:site_package/Configuration/page.tsconfig
# Add a new element (header) to the "common" group
mod.wizards.newContentElement.wizardItems.common.elements.header {
    iconIdentifier = content-header
    title = Header
    description = Adds a header element only
    tt_content_defValues {
        CType = header
    }
}
mod.wizards.newContentElement.wizardItems.common.show := addToList(header)
Copied!

Example: Create a new group and add an element to it

EXT:site_package/Configuration/page.tsconfig
# Create a new group and add a (pre-filled) element to it
mod.wizards.newContentElement.wizardItems.myGroup {
    header = LLL:EXT:cms/layout/locallang.xlf:advancedFunctions
    elements.customText {
        iconIdentifier = content-text
        title = Introductory text for national startpage
        description = Use this element for all national startpages
        tt_content_defValues {
            CType = text
            bodytext (
                    <h2>Section Header</h2>
                    <p class="bodytext">Lorem ipsum dolor sit amet, consectetur, sadipisci velit ...</p>
            )
            header = Section Header
            header_layout = 100
        }
    }
}
mod.wizards.newContentElement.wizardItems.myGroup.show = customText
Copied!

With the second example, the bottom of the new content element wizard shows:

Added entry in the new content element wizard

Added entry in the new content element wizard

newRecord.order

newRecord.order
Type
list of values

Define an alternate order for the groups of records in the new records wizard. Pages and content elements will always be on top, but the order of other record groups can be changed.

Records are grouped by extension keys, plus the special key "system" for records provided by the TYPO3 Core.

Example: Place the tt_news group at the top of the new record dialog

Place the tt_news group at the top (after pages and content elements), other groups follow unchanged:

EXT:site_package/Configuration/page.tsconfig
mod.wizards.newRecord.order = tt_news
Copied!
The position of News changed after modifying the New record screen

The position of News changed after modifying the New record screen

newRecord.pages

newRecord.pages
Type
boolean

Use the following sub-properties to show or hide the specified links. Setting any of these properties to 0 will hide the corresponding link, but setting to 1 will leave it visible.

show.pageAfter
Show or hide the link to create new pages after the selected page.
show.pageInside
Show or hide the link to create new pages inside the selected page.
show.pageSelectPosition
Show or hide the link to create new pages at a selected position.

options

Various options for the page affecting the Core at various points.

Properties

backendLayout.exclude

backendLayout.exclude
Type
list of identifiers / uids

Exclude a list of backend layouts from being selectable when assigning a backend layout to a page record.

Use the uid/identifier of the record in the default data provider.

Example: Exclude two backend layouts from drop down selector

Two backend layout records shown in list module

Before: Two backend layout records shown in list module

EXT:site_package/Configuration/page.tsconfig
# Exclude two backend layouts from drop down selector
options.backendLayout.exclude = 1,2
Copied!
Drop down without backend layouts

After: Drop down without backend layouts

defaultUploadFolder

New in version 12.3

defaultUploadFolder
Type
string

Identical to the user TSconfig setting options.defaultUploadFolder, this allows the setting of a default upload folder per page.

If specified and the given folder exists, this setting will override the value defined in user TSconfig.

The syntax is "storage_uid:file_path".

Example: Set default upload

EXT:site_package/Configuration/page.tsconfig
# Set default upload folder to "fileadmin/page_upload" on PID 1
[traverse(page, "uid") == 1]
    options.defaultUploadFolder = 1:/page_upload/
[END]
Copied!

RTE

The RTE prefix key is used for configuration of the Rich Text Editor. Please refer to the RTE chapter in Core API document for more general information on RTE configuration and data processing.

The order in which the configuration for the RTE is loaded is (the first one which is set will be used, see example below):

  1. preset defined for a specific field via page TSconfig
  2. richtextConfiguration defined for a specific field via TCA
  3. general preset defined via page TSconfig (RTE.default.preset)
  4. default (the preset "default", e.g. as defined by EXT:rte_ckeditor or overridden in ext_localconf.php)

The full property path building is a bit more complex than for other property segments. The goal is that global options can be set that can also be overridden in more specific situations:

Configure all RTE for all tables, fields and types:
RTE.default
Configure RTE for a specific field in a table
RTE.config.[tableName].[fieldName]
Configure RTE for a specific field in a table for a specific record type
RTE.config.[tableName].[fieldName].types.[type]

Configuring RTE via page TSconfig is general and not specific to a particular rich-text editor. However, TYPO3 comes with EXT:rte_ckeditor, so this one will usually be used. This page covers only the general configuration, for more information about configuring EXT:rte_ckeditor, see the rte_ckeditor configuration.

Examples

Example: Disable RTE

EXT:site_package/Configuration/page.tsconfig
# Disable all RTEs
RTE.default.disabled = 1
Copied!
EXT:site_package/Configuration/page.tsconfig
# Disable all RTEs
RTE.default.disabled = 1
# Enable RTE for the tt_content bodytext field only
RTE.config.tt_content.bodytext.disabled = 0
Copied!
EXT:site_package/Configuration/page.tsconfig
# Disable all RTEs
RTE.default.disabled = 1
# Enable RTE for the tt_content bodytext field only
RTE.config.tt_content.bodytext.disabled = 0
# But disable RTE for tt_content bodytext again if the record type is "text"
RTE.config.tt_content.bodytext.types.text.disabled = 1
Copied!

Example: Override preset

Refer to the description of the order above for details of which setting has priority over which.

Summary:

  • Setting the preset via page TSconfig for a specific field overrides all, else
  • TCA richtextConfiguration (for a specific field) overrides the page TSconfig default preset (RTE.default.preset)
EXT:site_package/Configuration/page.tsconfig
# set a default preset to use as fallback
RTE.default.preset = custom_preset_default

# Override preset for field "description" in table "tt_address"
RTE.config.tt_address.description.preset = custom_preset_fancy
Copied!

Properties

disabled

disabled
Type
boolean

If set, the editor is disabled. This option is evaluated in \TYPO3\CMS\Backend\Form\FormEngine where it determines whether the RTE is rendered or not. Note that a backend user can also ultimately disable RTE's in his user settings.

buttons

config.contentsLanguageDirection

config.contentsLanguageDirection
Type
string

The configuration contentsLangDirection of the ckeditor is used to define the direction of the content. It is filled by the direction defined in the site language of the current element.

As fallback the following page TsConfig configuration can be used:

EXT:my_sitepackage/Configuration/page.tsconfig
# always use right to left
RTE.config.contentsLanguageDirection = rtl

# except for the following language:
[siteLanguage("locale") == "en_US"]
    RTE.config.contentsLanguageDirection = ltr
[END]
Copied!

proc

The proc section allows customization of the server processing of the content, see the transformation section of the RTE chapter in the core API document for more general information on server processing.

The proc properties are in \TYPO3\CMS\Core\Html\RteHtmlParser and are universal for all RTEs. The main objective of these options is to allow for minor configuration of the transformations. For instance you may disable the mapping between <b>-<strong> and <i>-<em> tags which is done by the ts_transform transformation.

Notice how many properties relate to specific transformations only! Also notice that the meta-transformations ts_css imply other transformations.

This means that options limited to ts_transform will also work for ts_css of course.

allowedClasses

proc.allowedClasses
Type
string with comma separated values

Applies for ts_transform and css_transform only.

Direction: From RTE to database, saving a record.

Allowed general class names when content is stored in database. Could be a list matching the number of defined classes you have. Class names are case insensitive.

This might be a really good idea to do, because when pasting in content from MS word for instance there are a lot of <SPAN> and <P> tags which may have class names in. So by setting a list of allowed classes, such foreign class names are removed.

If a class name is not found in this list, the default is to remove the class.

allowTags

proc.allowTags
Type
string with comma separated values

Applies for ts_transform and css_transform only.

Tags to allow. Notice, this list is added to the default list, which you see here:

b,i,u,a,img,br,div,center,pre,figure,figcaption,font,hr,sub,sup,p,strong,em,li,ul,ol,blockquote,strike,span,abbr,acronym,dfn

allowTagsOutside

proc.allowTagsOutside
Type
string with comma separated values
Default
address, article, aside, blockquote, footer, header, hr, nav, section, div

Applies for ts_transform and css_transform only.

Enter tags which are allowed outside of <P> and <DIV> sections when converted back to database.

Example: Allow only hr tags outside of p and div
EXT:site_package/Configuration/page.tsconfig
# Allow only hr tags outside of p and div
RTE.default.proc.allowTagsOutside = hr
Copied!

blockElementList

proc.blockElementList
Type
string with comma separated values

Comma-separated list of uppercase tags (e.g. P,HR) that overrides the list of HTML elements that will be treated as block elements by the RTE transformations.

denyTags

proc.denyTags
Type
string with comma separated values

Applies for ts_transform and css_transform only.

Tags from above list to disallow.

entryHTMLparser_db

proc.entryHTMLparser_db
Type
boolean / HTMLparser

Applies to all kinds of processing.

Allows to enable / disable the HTMLparser before the content is processed with the predefined processors (e.g. ts_images or ts_transform).

entryHTMLparser_rte

proc.entryHTMLparser_rte
Type
boolean / HTMLparser

Applies to all kinds of processing.

Allows to enable / disable the HTMLparser before the content is processed with the predefined processors (e.g. ts_images or ts_transform).

exitHTMLparser_db

proc.exitHTMLparser_db
Type
boolean / HTMLparser

Applies to all kinds of processing.

Allows to enable / disable the HTMLparser after the content is processed with the predefined processors (e.g. ts_images or ts_transform).

exitHTMLparser_rte

proc.exitHTMLparser_rte
Type
boolean / HTMLparser

Applies to all kinds of processing.

Allows to enable / disable the HTMLparser after the content is processed with the predefined processors (e.g. ts_images or ts_transform).

HTMLparser_db

proc.HTMLparser_db
Type
HTMLparser

Applies for ts_transform and css_transform only.

These are additional options to the HTML parser calls which strips of tags when the content is prepared from the RTE to the database, saving a record. It is possible to configure additional rules like which other tags to preserve, which attributes to preserve, which values are allowed as attributes of a certain tag etc.

For the detailed list of properties, see the section of the TypoScript reference.

Sanitization

New in version 9.5.29/10.4.19

An HTML sanitizer is available to sanitize and remove XSS from markup. It strips tags, attributes and values that are not explicitly allowed.

Sanitization for persisting data is disabled by default and can be enabled globally by using the corresponding feature flag in the configuration files config/system/settings.php or config/system/additional.php:

$GLOBALS['TYPO3_CONF_VARS']['SYS']['features']['security.backend.htmlSanitizeRte'] = true;
Copied!

It can then be disabled per use case with a custom processing instruction:

EXT:site_package/Configuration/Processing.yaml
processing:
  allowTags:
    # ...
  HTMLparser_db:
    # ...
    # disable individually per use case
    htmlSanitize: false

    # This is the default configuration,
    # the feature flag has to be enabled
    htmlSanitize:
      # use default builder as configured in
      # $GLOBALS['TYPO3_CONF_VARS']['SYS']['htmlSanitizer']
      build: default
Copied!

HTMLparser_rte

proc.HTMLparser_rte
Type
HTMLparser

Applies for ts_transform and css_transform only.

These are additional options to the HTML parser calls which strips of tags when the content is prepared from the database to the RTE rendering. It is possible to configure additional rules like which other tags to preserve, which attributes to preserve, which values are allowed as attributes of a certain tag etc.

For the detailed list of properties, see the section of the TypoScript reference.

overruleMode

proc.overruleMode
Type
Comma list of RTE transformations

This can overrule the RTE transformation set from TCA. Notice, this is a comma list of transformation keys.

TCAdefaults

This allows to set or override the default values of TCA fields that is available for various TCA types, for instance for type=input.

The full path of a setting include the table and the field name: TCAdefaults.[table name].[field]

This key is also available on User TSconfig level, the order of default values when creating new records in the backend is this:

  1. Value from $GLOBALS['TCA']
  2. Value from user TSconfig
  3. Value from page TSconfig (these settings)
  4. Value from "defVals" GET variables
  5. Value from previous record based on useColumnsForDefaultValues

Example: Do not hide newly created pages by default

EXT:site_package/Configuration/page.tsconfig
TCAdefaults.pages.hidden = 0
Copied!

TCEFORM

Allows detailed configuration of how editing forms are rendered for a page tree branch and for individual tables if you like. You can enable and disable options, blind options in selector boxes etc.

See the core API document section FormEngine for more details on how records are rendered in the backend.

Applying properties

The properties listed below apply to various contexts which are explained per property. The full property path thus depends on the property and where it should apply. In general, a more specific property path overrides a less specific one:

Some properties apply to single fields, those can be usually set per table or per table and record type. This leads to the property paths TCEFORM.[tableName].[fieldName].[propertyName] to configure the field for all types and TCEFORM.[tableName].[fieldName].types.[typeName] to configure a field for a specific type, see the TCA type section for details on types.

While all that property path munging looks messy at first, it should become more clear when reading through the single properties below and looking at the examples.

Applying properties to FlexForm fields

Other properties also apply to FlexForm fields, in this case the full property path including the data structure key has to be set:

# TCEFORM.[tableName].[fieldName].[dataStructureKey].[flexSheet].[flexFieldName with escaped dots].[propertyName]
TCEFORM.tt_content.pi_flexform.sfregister_create.sDEF.settings\.fields\.selected.addItems.ZZZ = ZZZ
Copied!

The sheet name (sDEF) must be given only if the FlexForm has a sheet.

The [dataStructureKey] represents the key of a FlexForm in $GLOBALS['TCA'][<tableName>]['columns'][<field>]['config']['ds']. This key will be split into up to two parts. By default the first part will be used as identifier of the FlexForm in TSconfig. The second part will override the identifier if it is not empty, list or *. For example the identifier of the key myext_pi1,list will be myext_pi1 and of the key *,my_CType it will be my_CType. See section Pointing to a data structure of the TCA reference for details.

The flexFieldName is the name of the property in the FlexForm. If it contains dots ('.'), these must be escaped with backslash.

Some properties apply to whole FlexForm sheets, their property path is TCEFORM.[tableName].[fieldName].[dataStructureKey].[flexSheet].[propertyName].

Properties

addItems

addItems
Type
localized string

Change the list of items in TCA type=select fields. Using this property, items can be added to the list. Note that the added elements might be removed if the selector represents records: If the select box is a relation to another table. In that case only existing records will be preserved.

The subkey icon will allow to add your own icons to new values.

New in version 12.1

The subkey group can be used to insert a new element into an existing select item group by settings the value to the group identifier. The grouping is usually displayed in select fields with groups available.

This property is available for various levels:

table level, example:
TCEFORM.tt_content.header_layout.addItems
table and record type level, example:
TCEFORM.tt_content.header_layout.types.textpic.addItems
Flex form field level, example:

TCEFORM.tt_content.pi_flexform.myext_pi1.sDEF.settings\.myfield.addItems

Where sDEF is the sheet name. For a description see the section Applying properties to FlexForm fields on this page.

Example: Add header layout option

EXT:site_package/Configuration/page.tsconfig
TCEFORM.tt_content.header_layout {
    # Add another header_layout option:
    addItems.1525215969 = Another header layout
    # Add another one with localized label, icon and group
    addItems.1525216023 = LLL:EXT:my_ext/Resources/Private/Language/locallang.xlf:header_layout
    addItems.1525216023.icon = EXT:my_ext/icon.png
    addItems.1525216023.group = special
}

Instead of adding files by path, icon identifiers should be used.
Copied!

altLabels

altLabels
Type
localized string

This property applies to TCA type=select, TCA type=check and TCA type=radio.

This property allows you to enter alternative labels for the items in the list. For a single checkbox or radio button, use default, for multiple checkboxes and radiobuttons, use an integer for their position starting at 0.

This property is available for various levels:

table level:
TCEFORM.[tableName].[fieldName].altLabels
table and record type level:
TCEFORM.[tableName].[fieldName].types.[typeName].altLabels
Flex form field level, example:

TCEFORM.tt_content.pi_flexform.myext_pi1.sDEF.settings\.myfield.altLabels

Where sDEF is the sheet name. For a description see the section Applying properties to FlexForm fields on this page.

Example: Override labels for document types

EXT:site_package/Configuration/page.tsconfig
TCEFORM.pages.doktype {
    # Set a different item label
    altLabels.1 = STANDARD Page Type
    altLabels.254 = Folder (for various elements)
    # Sets the default label for Recycler via "locallang":
    altLabels.255 = LLL:EXT:my_ext/Resources/Private/Language/locallang_tca.xlf:recycler
}
Copied!
The Page types with modified labels

The Page types with modified labels

EXT:site_package/Configuration/page.tsconfig
TCEFORM.tt_content.space_before_class.altLabels.. = foo
Copied!

Note the double dot after altLabels.

PAGE_TSCONFIG_ID

PAGE_TSCONFIG_ID
Type
integer

This option allows to provide a value for dynamic SQL-WHERE parameters. The value is defined for a specific field of a table. For usage with flexform fields, the entire path to a sub-field must be provided.

Example: Substitute a marker in a plugin FlexForm

EXT:site_package/Configuration/page.tsconfig
TCEFORM.tt_content.pi_flexform.myext_pi1.sDEF.myField.PAGE_TSCONFIG_ID = 22
Copied!

In this example, the value will substitute the marker in a plugin FlexForm.

EXT:site_package/Configuration/page.tsconfig
TCEFORM.tx_myext_table.myfield.PAGE_TSCONFIG_ID = 22
Copied!

This example might be used for a record in an extension. It refers to a table called tx_myext_table and the field myfield. Here the marker will be substituted by the value 22.

PAGE_TSCONFIG_IDLIST

PAGE_TSCONFIG_IDLIST
Type
list of integers

See above.

Example: Substitute a list of IDs in a plugin FlexForm

EXT:site_package/Configuration/page.tsconfig
TCEFORM.tt_content.pi_flexform.myext_pi1.sDEF.myField.PAGE_TSCONFIG_IDLIST = 20,21,22
Copied!

In this example, the value will substitute the marker in a plugin FlexForm.

EXT:site_package/Configuration/page.tsconfig
TCEFORM.tx_myext_table.myfield.PAGE_TSCONFIG_IDLIST = 20,21,22
Copied!

This example might be used for a record in an extension. It refers to a table called tx_myext_table and the field myfield. Here the marker will be substituted by the list of integers.

PAGE_TSCONFIG_STR

PAGE_TSCONFIG_STR
Type
string

See above.

Example: Substitute a string in a plugin FlexForm

EXT:site_package/Configuration/page.tsconfig
TCEFORM.tt_content.pi_flexform.myext_pi1.sDEF.myField.PAGE_TSCONFIG_STR = %hello%
Copied!

In this example, the value will substitute the marker in a plugin FlexForm.

EXT:site_package/Configuration/page.tsconfig
TCEFORM.tx_myext_table.myfield.PAGE_TSCONFIG_STR = %hello%
Copied!

This example might be used for a record in an extension. It refers to a table called tx_myext_table and the field myfield. Here the marker will be substituted by the given value.

colorPalette

New in version 13.0

colorPalette
Type
string

Assign a color palette to a specific field of a table, for all fields within a table or a global configuration affecting all color pickers within FormEngine. If no palette is defined, FormEngine falls back to all configured colors.

Example: Assign a palette to a field

EXT:my_sitepackage/Configuration/page.tsconfig
# Assign a palette to a specific field
TCEFORM.tx_myext_table.myfield.colorPalette = messages

# Assign a palette to all color pickers used in a table
TCEFORM.tx_myext_table.colorPalette = key_colors

# Assign global palette
TCEFORM.colorPalette = main
Copied!

config

config

This setting allows to override TCA field configuration. This will influence configuration settings in $GLOBALS['TCA'][<tableName>]['columns'][<fieldName>]['config'][<key>], see TCA reference for details.

Not all configuration options can be overridden, the properties are restricted and depend on the field type. The array typo3/sysext/backend/Classes/Form/Utility/FormEngineUtility.php->$allowOverrideMatrix within FormEngine code defines details:

'input' => ['size', 'max', 'readOnly'],
'number' => ['size', 'readOnly'],
'email' => ['size', 'readOnly'],
'link' => ['size', 'readOnly'],
'password' => ['size', 'readOnly'],
'datetime' => ['size', 'readOnly'],
'color' => ['size', 'readOnly'],
'uuid' => ['size', 'enableCopyToClipboard'],
'text' => ['cols', 'rows', 'wrap', 'max', 'readOnly'],
'json' => ['cols', 'rows', 'readOnly'],
'check' => ['cols', 'readOnly'],
'select' => ['size', 'autoSizeMax', 'maxitems', 'minitems', 'readOnly', 'treeConfig', 'fileFolderConfig'],
'category' => ['size', 'maxitems', 'minitems', 'readOnly', 'treeConfig'],
'group' => ['size', 'autoSizeMax', 'maxitems', 'minitems', 'readOnly', 'elementBrowserEntryPoints'],
'folder' => ['size', 'autoSizeMax', 'maxitems', 'minitems', 'readOnly', 'elementBrowserEntryPoints'],
'inline' => ['appearance', 'behaviour', 'foreign_label', 'foreign_selector', 'foreign_unique', 'maxitems', 'minitems', 'size', 'autoSizeMax', 'symmetric_label', 'readOnly'],
'file' => ['appearance', 'behaviour', 'maxitems', 'minitems', 'readOnly'],
'imageManipulation' => ['ratios', 'cropVariants'],
Copied!

The reason that not all properties can be changed is that internally, the DataHandler performs database operations which require finalized TCA definitions that are accessed without this TSconfig getting interpreted. This mismatch would then lead to inconsistencies.

An input or text TCA field can not enable the RTE via the config.enableRichtext option due to similar reasons in respect to the DataHandler.

Also, if for example the max definition of a field is made larger than the TCA definition of that field, you may need to to change the file ext_tables.sql (see ext_tables.sql) to adjust column definitions, especially when using the Auto-generated structure.

The property config is available for these levels:

table level, example:
TCEFORM.tt_content.header.config.max
table and record type level, example:
TCEFORM.tt_content.header.types.textpic.config.max
Flex form field level, example:
No current TYPO3 version allows to override the configuration of Flex form fields, even though this was previously documented here. This may change in future versions.

config.treeConfig

config.treeConfig
Type
int

The treeConfig sub properties of TCEFORM.config are dedicated to the TCA config type select with renderType=selectTree. A couple of treeConfig properties can be overriden on page TSconfig level, see their detailed description in the TCA reference:

EXT:site_package/Configuration/page.tsconfig
config.treeConfig.startingPoints = 1,42
config.treeConfig.appearance.expandAll = 1
config.treeConfig.appearance.maxLevels = 2
config.treeConfig.appearance.nonSelectableLevels = 1
Copied!

This property is available for various levels:

table level, example:
TCEFORM.tt_content.myField.config.treeConfig.startingPoints
table and record type level, example:
TCEFORM.tt_content.header.types.config.treeConfig.startingPoints
Flex form field level, example:
No current TYPO3 version allows to override the configuration of Flex form fields, even though this was previously documented here. This may change in future versions.

description

description
Type
string

This property sets or overrides the TCA property TCA description, which allows to define a description for a TCA field, next to its label.

EXT:site_package/Configuration/page.tsconfig
TCEFORM.tt_content.header.description = override description
Copied!

As already known from other properties, this can also be configured for a specific language.

EXT:site_package/Configuration/page.tsconfig
TCEFORM.tt_content.header.description.de = override description for DE
Copied!

The option can be used on a per record type basis, too.

EXT:site_package/Configuration/page.tsconfig
TCEFORM.tt_content.header.types.textpic.description = override description for textpic
Copied!

Also referencing language labels is supported.

EXT:site_package/Configuration/page.tsconfig
TCEFORM.tt_content.header.description = LLL:EXT:my_ext/Resources/Private/Language/locallang.xlf:override_description
Copied!

disabled

disabled
Type
boolean

If set, the field is not displayed in the backend form of the record. However, the field can still be set by other means. For example if this property is set: TCEFORM.tt_content.colPos.disabled = 1 the Column field will not be displayed in the content elements form. The content element can still be moved to another column which internally also sets the field colPos. Fields with the TSconfig property TCEFORM.<table>.<field>.disabled therefore show the same behaviour as fields of the TCA type passthrough.

table level, example:
TCEFORM.tt_content.header.disabled
table and record type level, example:
TCEFORM.tt_content.header.types.textpic.disabled
Flex form sheet level. If set, the entire tab is not rendered, example:

TCEFORM.tt_content.pi_flexform.myext_pi1.sDEF.disabled

Where sDEF is the sheet name. For a description see the section Applying properties to FlexForm fields on this page.

Flex form field level, example:

TCEFORM.tt_content.pi_flexform.myext_pi1.sDEF.settings\.myfield.disabled

Where sDEF is the sheet name. For a description see the section Applying properties to FlexForm fields on this page.

Example: Disable editing of the page title

EXT:site_package/Configuration/page.tsconfig
TCEFORM.pages.title {
    # The title field of the pages table is not editable
    disabled = 1
}
Copied!

disableNoMatchingValueElement

disableNoMatchingValueElement
Type
boolean

This property applies only to items in TCA type=select fields. If a selector box value is not available among the options in the box, the default behavior of TYPO3 is to preserve the value and to show a label which warns about this special state:

A missing selector box value is indicated by a warning message

A missing selector box value is indicated by a warning message

If disableNoMatchingValueElement is set, the element "INVALID VALUE" will not be added to the list.

This property is available for various levels:

table level, example:
TCEFORM.tt_content.header_layout.disableNoMatchingValueElement
table and record type level, example:
TCEFORM.tt_content.header_layout.types.textpic.disableNoMatchingValueElement
Flex form field level, example:

TCEFORM.tt_content.pi_flexform.myext_pi1.sDEF.settings\.myfield.disableNoMatchingValueElement

Where sDEF is the sheet name. For a description see the section Applying properties to FlexForm fields on this page.

Example: Disable "INVALID VALUE ..." label

EXT:site_package/Configuration/page.tsconfig
TCEFORM.pages.doktype {
    # "INVALID VALUE ..." label will never show up
    disableNoMatchingValueElement = 1
}
Copied!

Now the selector box will default to the first element in the selector box:

Instead of show a warning message the system choose the first element in the selector box

Instead of show a warning message the system choose the first element in the selector box

fileFolderConfig

fileFolderConfig
Type
array

The special fileFolder configuration options for TCA columns of type TCA type=select can be used to fill a select field with files (images / icons) from a defined folder.

The fileFolderConfig TCA configuration can be overridden with page TSconfig, allowing administrators to use different folders or different file extensions, per site.

The same sub properties as in the fileFolderConfig TCA configuration are available:

EXT:site_package/Configuration/page.tsconfig
fileFolderConfig {
    folder = 'EXT:styleguide/Resources/Public/Icons'
    allowedExtensions = 'svg'
    depth = 1
}
Copied!

This property is available for various levels:

table level:
TCEFORM.[tableName].[fieldName].fileFolderConfig.folder
table and record type level:
TCEFORM.[tableName].[fieldName].types.[typeName].fileFolderConfig.folder
Flex form field level, example:

TCEFORM.tt_content.pi_flexform.myext_pi1.sDEF.settings\.myfield.fileFolderConfig.folder

Where sDEF is the sheet name. For a description see the section Applying properties to FlexForm fields on this page.

itemsProcFunc

itemsProcFunc
Type
custom

This property applies only to items in TCA type=select fields. The properties of this key is passed on to the itemsProcFunc in the parameter array by the key "TSconfig".

This property is available for various levels:

table level:
TCEFORM.[tableName].[fieldName].itemsProcFunc
table and record type level:
TCEFORM.[tableName].[fieldName].types.[typeName].itemsProcFunc
Flex form field level, example:

TCEFORM.tt_content.pi_flexform.myext_pi1.sDEF.settings\.myfield.itemsProcFunc

Where sDEF is the sheet name. For a description see the section Applying properties to FlexForm fields on this page.

keepItems

keepItems
Type
list of values

Change the list of items in TCA type=select fields. Using this property, all items except those defined here are removed.

This property is available for various levels:

table level, example:
TCEFORM.tt_content.header_layout.keepItems
table and record type level, example:
TCEFORM.tt_content.header_layout.types.textpic.keepItems
Flex form field level, example:

TCEFORM.tt_content.pi_flexform.myext_pi1.sDEF.settings\.myfield.keepItems

Where sDEF is the sheet name. For a description see the section Applying properties to FlexForm fields on this page.

Example: Show only standard and spacer pages

EXT:site_package/Configuration/page.tsconfig
TCEFORM.pages.doktype {
    # Show only standard and "Spacer" page types
    keepItems = 1, 199
}
Copied!

label

label
Type
localized string

This allows you to enter alternative labels for any field. The value can be a LLL: reference to a localization file, the system will then look up the selected backend user language and tries to fetch the localized string if available. However, it is also possible to override these by appending the language key and hard setting a value, for example label.de = Neuer Feldname.

This property is available for various levels:

table level, example:
TCEFORM.[tableName].[fieldName].label
table and record type level, example:
TCEFORM.[tableName].[fieldName].types.[typeName].label
Flex form field level, example:

TCEFORM.tt_content.pi_flexform.myext_pi1.sDEF.settings\.myfield.label

Where sDEF is the sheet name. For a description see the section Applying properties to FlexForm fields on this page.

Example: Override the label of a field

EXT:site_package/Configuration/page.tsconfig
TCEFORM.pages.title {
    label = LLL:EXT:my_ext/Resources/Private/Language/locallang.xlf:table.column
    label.default = New Label
    label.de = Neuer Feldname
}
Copied!

noMatchingValue_label

noMatchingValue_label
Type
localized string

This property applies only to items in TCA type=select fields, it allows defining a different label of the noMatchingValue element.

It is possible to use the placeholder %s to insert the value. If the property is set to empty, the label will be blank.

This property is available for various levels:

table level, example:
TCEFORM.tt_content.header_layout.noMatchingValue_label
table and record type level, example:
TCEFORM.tt_content.header_layout.types.textpic.noMatchingValue_label
Flex form field level, example:

TCEFORM.tt_content.pi_flexform.myext_pi1.sDEF.settings\.myfield.noMatchingValue_label

Where sDEF is the sheet name. For a description see the section Applying properties to FlexForm fields on this page.

Example: Replace "INVALID VALUE ..." label with another string

EXT:site_package/Configuration/page.tsconfig
TCEFORM.pages.doktype {
    # Different "INVALID VALUE ..." label:
    noMatchingValue_label = VALUE "%s" was not available!
}
Copied!
An invalid selector box value is indicated by a warning message

An invalid selector box value is indicated by a warning message

removeItems

removeItems
Type
list of values

Change the list of items in TCA type=select fields. Using this property, single items can be removed, leaving all others.

This property is available for various levels:

table level, example:
TCEFORM.tt_content.header_layout.removeItems
table and record type level, example:
TCEFORM.tt_content.header_layout.types.textpic.removeItems
Flex form field level, example:

TCEFORM.tt_content.pi_flexform.myext_pi1.sDEF.settings\.myfield.removeItems

Where sDEF is the sheet name. For a description see the section Applying properties to FlexForm fields on this page.

Example: Remove "Recycler" and "Spacer" page types

EXT:site_package/Configuration/page.tsconfig
TCEFORM.pages.doktype {
    # Remove "Recycler" and "Spacer" page types
    removeItems = 199, 255
}
Copied!

sheetDescription

sheetDescription
Type
localized string

Specifies a description for the sheet shown in the FlexForm.

This property is only available on flex form sheet level, for example TCEFORM.tt_content.pi_flexform.myext_pi1.sDEF.sheetDescription.

Where sDEF is the sheet name. For a description see the section Applying properties to FlexForm fields on this page.

sheetShortDescr

sheetShortDescr
Type
localized string

Specifies a short description of the sheet used as link title in the tab-menu.

This property is only available on flex form sheet level, example: TCEFORM.tt_content.pi_flexform.myext_pi1.sDEF.sheetShortDescription.

Where sDEF is the sheet name. For a description see the section Applying properties to FlexForm fields on this page.

sheetTitle

sheetTitle
Type
localized string

Set the title of the sheet / tab in a FlexForm configuration.

This property is only available on flex form sheet level, example: TCEFORM.tt_content.pi_flexform.myext_pi1.sDEF.sheetTitle.

Where sDEF is the sheet name. For a description see the section Applying properties to FlexForm fields on this page.

Example: Rename the first tab of the FlexForm plugin

EXT:site_package/Configuration/page.tsconfig
TCEFORM.tt_content.pi_flexform.myext_pi1.sDEF {
    # Rename the first tab of the FlexForm plug-in configuration
    sheetTitle = LLL:my_ext/Resource/Private/Language/locallang.xlf:tt_content.pi_flexform.myext_pi1.sDEF
}
Copied!

suggest

Configuration of the suggest wizard that is available and often enabled for TCA type=group fields.

A configured suggest wizard

A configured suggest wizard

The properties listed below are available on various levels. A more specific setting overrides a less specific one:

Configuration of all suggest wizards in all tables for all target query tables:
TCEFORM.suggest.default
Configuration of all suggest wizards in all tables looking up records from a specific target table:
TCEFORM.suggest.[queryTable]
Configuration of one suggest wizard field in one table for all target query tables:
TCEFORM.[tableName].[fieldName].suggest.default
Configuration of one suggest wizard field in one table for a specific target query table:
TCEFORM.[tableName].[fieldName].suggest.[queryTable]
Configuration of one suggest wizard field in a flex form field of one table for all target query tables:
TCEFORM.[tableName].[fieldName].[dataStructureKey].[sheetName].[flexFieldName].suggest.default
Configuration of one suggest wizard field in a flex form field of one table for a specific target query table:
TCEFORM.[tableName].[fieldName].[dataStructureKey].[sheetName].[flexFieldName].suggest.[queryTable]

suggest.additionalSearchFields

suggest.additionalSearchFields
Type
string

Comma-separated list of fields the suggest wizard should also search in. By default the wizard looks only in the fields listed in the label and label_alt of TCA ctrl properties.

suggest.addWhere

suggest.addWhere
Type
string

Additional WHERE clause (with AND at the beginning).

Markers possible for replacement:

Example: limit storage_pid to the children of a certain page
EXT:site_package/Configuration/page.tsconfig
TCEFORM.pages.storage_pid.suggest.default {
    addWhere = AND pages.pid=###PAGE_TSCONFIG_ID###
}
Copied!

suggest.cssClass

suggest.cssClass
Type
string

Add a CSS class to every list item of the result list.

EXT:site_package/Configuration/page.tsconfig
TCEFORM.suggest.pages {
    # Configure all suggest wizards which list records from table "pages"
    # to add the CSS class "pages" to every list item of the result list.
    cssClass = pages
}
Copied!

suggest.hide

suggest.hide
Type
boolean

Hide the suggest field. Works only for single fields.

Example: Hide the suggest field for the storage_pid
EXT:site_package/Configuration/page.tsconfig
TCEFORM.pages.storage_pid.suggest.default {
    hide = 1
}
Copied!

suggest.maxPathTitleLength

suggest.maxPathTitleLength
Type
positive integer

Maximum number of characters to display when a path element is too long.

Example: Limit the suggest field to 30 characters
EXT:site_package/Configuration/page.tsconfig
TCEFORM.suggest.default {
    maxPathTitleLength = 30
}
Copied!

suggest.minimumCharacters

suggest.minimumCharacters
Type
positive integer
Default
2

Minimum number of characters needed to start the search. Works only for single fields.

Example: Start the suggest search after 3 characters
EXT:site_package/Configuration/page.tsconfig
TCEFORM.pages.storage_pid.suggest.default {
    minimumCharacters = 3
}
Copied!

suggest.pidDepth

suggest.pidDepth
Type
positive integer

Expand pidList by this number of levels. Only has an effect, if pidList has a value.

Example: Set search depth for suggest field
EXT:site_package/Configuration/page.tsconfig
TCEFORM.suggest.default {
    pidList = 6,7
    pidDepth = 4
}
Copied!

suggest.pidList

suggest.pidList
Type
list of values

Limit the search to certain pages (and their subpages). When pidList is empty all pages will be included in the search as long as the backend user is allowed to see them.

Example: Limit suggest search to records on certain pages
EXT:site_package/Configuration/page.tsconfig
TCEFORM.suggest.default {
    # sets the pidList for a suggest fields in all tables
    pidList = 1,2,3,45
}
Copied!

suggest.receiverClass

suggest.receiverClass
Type
Fully Qualified PHP class name
Default
\TYPO3\CMS\Backend\Form\Element\SuggestDefaultReceiver

PHP class alternative receiver class - the file that holds the class should be derived from \TYPO3\CMS\Backend\Form\Element\SuggestDefaultReceiver.

suggest.renderFunc

suggest.renderFunc
Type
string

User function to manipulate the displayed records in the result.

suggest.searchCondition

suggest.searchCondition
Type
string

Additional WHERE clause (no AND needed to prepend).

Example: Only search on pages with doktype=1
EXT:site_package/Configuration/page.tsconfig
TCEFORM.pages.storage_pid.suggest.default {
    # Configure the suggest wizard for the field "storage_pid" in table "pages"
    # to search only for pages with doktype=1
    searchCondition = doktype=1
}
Copied!

suggest.searchWholePhrase

suggest.searchWholePhrase
Type
boolean
Default
0

Whether to do a LIKE=%mystring% (searchWholePhrase = 1) or a LIKE=mystring% (to do a real find as you type).

Example: Search only for whole phrases
EXT:site_package/Configuration/page.tsconfig
TCEFORM.pages.storage_pid.suggest.default {
    # Configure the suggest wizard for the field "storage_pid" in table "pages" to search only for whole phrases
    searchWholePhrase = 1
}
Copied!

TCEMAIN

Configuration for the TYPO3 Core Engine (DataHandler). For general information, see the according section of TYPO3 Explained.

Properties

clearCacheCmd

clearCacheCmd
Type
List of integers, all, pages or tags

This allows you to have the frontend cache for additional pages cleared when saving to some page or branch of the page tree.

It it possible to trigger clearing of all caches or just the pages cache. It is also possible to target precise pages either by referring to their ID numbers or to tags that are attached to them.

Attaching tags to page cache is described in the TypoScript Reference.

Example: Clear the cache for certain pages when a record is changed

EXT:site_package/Configuration/page.tsconfig
TCEMAIN {
    # Clear the cache for page uid 12 and 23 when saving a record in this page
    clearCacheCmd = 12, 23
    # Clear all frontent page caches of pages
    clearCacheCmd = pages
    # Clear ALL caches
    clearCacheCmd = all
    # Clear cache for all pages tagged with tag "pagetag1"
    clearCacheCmd = cacheTag:pagetag1
}
Copied!

clearCache_disable

clearCache_disable
Type
boolean

If set, then the automatic clearing of page cache when records are edited etc. is disabled. This also disables the significance of the two options clearCache_pageSiblingChildren and clearCache_pageGrandParent

clearCache_pageGrandParent

clearCache_pageGrandParent
Type
boolean

If set, then the grand parent of a page being edited will have the page cache cleared.

clearCache_pageSiblingChildren

clearCache_pageSiblingChildren
Type
boolean

If set, then children of all siblings of a page being edited will have the page cache cleared.

Default is that when a page record is edited, the cache for itself, the parent, and siblings (same level) is cleared.

disableHideAtCopy

disableHideAtCopy
Type
boolean

Disables the hideAtCopy TCA feature if configured for the table.

Example: Do not hide pages when they are copy-pasted

EXT:site_package/Configuration/page.tsconfig
TCEMAIN.table.pages {
   # Pages will *not* have "(copy)" appended:
   disablePrependAtCopy = 1
   # Pages will *not* be hidden upon copy:
   disableHideAtCopy = 1
}
Copied!

These settings adjust that a page which is copied will neither have "(copy X)" appended nor be hidden.

The last page in this tree, labeled "Test", is used as original to be copied. The first sub page was copied using the settings from the above example: It is labeled "Test" and is visible exactly like the original page. The page "Test (copy 2)" in the middle was in contrast copied in default mode: The page is hidden and the "(copy X)" suffix is added, if another page with the same named existed already.

Hidden page with added suffix after copying its original page

Hidden page with added suffix after copying its original page

Example: Apply disableHideAtCopy as default to all tables

EXT:site_package/Configuration/page.tsconfig
TCEMAIN.default {
  disableHideAtCopy = 1
}
Copied!

disablePrependAtCopy

disablePrependAtCopy
Type
boolean

Disable the prependAtCopy TCA feature if configured for the table.

The word "prepend" is misleading. The "(copy)" label is actually appended to the record title.

Example: Do not append the "(copy)" label to newly copied pages

EXT:site_package/Configuration/page.tsconfig
TCEMAIN.table.pages {
   # Pages will *not* have "(copy)" appended:
   disablePrependAtCopy = 1
   # Pages will *not* be hidden upon copy:
   disableHideAtCopy = 1
}
Copied!

These settings adjust that a page which is copied will neither have "(copy X)" appended nor be hidden.

The last page in this tree, labeled "Test", is used as original to be copied. The first sub page was copied using the settings from the above example: It is labeled "Test" and is visible exactly like the original page. The page "Test (copy 2)" in the middle was in contrast copied in default mode: The page is hidden and the "(copy X)" suffix is added, if another page with the same named existed already.

Hidden page with added suffix after copying its original page

Hidden page with added suffix after copying its original page

Example: Apply disablePrependAtCopy as default to all tables

EXT:site_package/Configuration/page.tsconfig
TCEMAIN.default {
  disablePrependAtCopy = 1
}
Copied!

linkHandler

linkHandler
Type
array of link handler configurations

Contains an array of link handler configurations.

handler
Fully qualified name of the class containing the backend link handler.
configuration
Configuration for the link handler, depends on the handler. For TYPO3\CMS\Backend\LinkHandler\RecordLinkHandler configuration.table must be defined.
scanBefore / scanAfter
Define the order in which handlers are queried when determining the responsible tab for editing an existing link.
displayBefore / displayAfter
Define the order of how the various tabs are displayed in the link browser.

Changed in version 12.0

Due to the integration of EXT:recordlist into EXT:backend the namespace of LinkHandlers has changed from TYPO3\CMS\Recordlist\LinkHandler to TYPO3\CMS\Backend\LinkHandler. For TYPO3 v12 the moved classes are available as an alias under the old namespace to allow extensions to be compatible with TYPO3 v11 and v12.

Example: Display an additional tab in the linkbrowser

The following page TSconfig display an additional tab with the label as title in the linkbrowser. It then saves the link in the format t3://record?identifier=my_content&uid=123. To render the link in the frontend you need to define the same key in the TypoScript setup config.recordLinks.

Page TSconfig definition for identifier my_content
TCEMAIN.linkHandler.my_content {
    handler = TYPO3\CMS\Backend\LinkHandler\RecordLinkHandler
    label = LLL:EXT:my_extension/Resources/Private/Language/locallang.xlf:link.customTab
    configuration {
        table = tx_myextension_content
    }
    scanBefore = page
}
Copied!

permissions

Value copyFromParent

The value copyFromParent can be set for each of the page TSconfig TCEMAIN.permissions.* sub keys. If this value is set, the page access permissions are copied from the parent page.

Example: Inherit the group id of the parent page
config/system/settings.php | typo3conf/system/settings.php
$GLOBALS['TYPO3_CONF_VARS']['BE']['defaultPageTSconfig'] .= '
    TCEMAIN.permissions.groupid = copyFromParent
    TCEMAIN.permissions.group = 31
    TCEMAIN.permissions.everybody = 0
';
Copied!

By default all new pages created by users will inherit the group of the parent page. Members of this group get all permissions. Users not in the group get no permissions.

When an administrator creates a new page she can use the module System > Access to set a different owner group for this new page.

All subpages created to this new page will now automatically have the new pages group. The administrator does not have to set custom TSconfig to achieve this.

This behaviour is similar to the "group sticky bit" in Unix for directories.

everybody

permissions.everybody
Type
list of strings or integer 0-31
Default
0

Default permissions for everybody who is not the owner user or member of the owning group, key list: show, edit, delete, new, editcontent.

Alternatively, it is allowed to set an integer between 0 and 31, indicating which bits corresponding to the key list should be set: show = 1, edit = 2, delete = 4, new = 8, editcontent = 16.

It also possible to set the value copyFromParent to inherit the value from the parent page.

Example: Set permissions defaults so that everybody can see the page
EXT:site_package/Configuration/page.tsconfig
TCEMAIN.permissions {
    # Everybody can at least see the page, normally everybody can do nothing
    everybody = show
}
Copied!

The page "Community" was created with the settings from the example above. Compared to the two other pages created with default permissions you can see the effect: "Everybody" has read access:

Page with altered permissions for backend users, groups and everybody

Page with altered permissions for backend users, groups and everybody

group

permissions.group
Type
list of strings or integer 0-31
Default
show,edit,new,editcontent
Default permissions for group members, key list: show, edit, new,
editcontent.

Alternatively, it is allowed to set an integer between 0 and 31, indicating which bits corresponding to the key list should be set: show = 1, edit = 2, delete = 4, new = 8, editcontent = 16.

It also possible to set the value copyFromParent to inherit the value from the parent page.

Example: Set permission defaults so that the group can do anything but delete a page
EXT:site_package/Configuration/page.tsconfig
TCEMAIN.permissions {
    # Group can do anything, normally "delete" is disabled
    group = 31
}
Copied!

The page "Community" was created with the settings from the example above. Compared to the two other pages created with default permissions you can see the effect: The Backend Group can now also delete the page by default:

Page with altered permissions for backend users, groups and everybody

Page with altered permissions for backend users, groups and everybody

groupid

permissions.groupid
Type
positive integer or string

By default the owner group of a newly created page is set to the main group of the backend user creating the page.

By setting the value of this property to copyFromParent the owner group is copied from the newly created pages parent page.

The owner group of a newly created page can be hardcoded by setting this property to a positive integer greater then zero.

Example: Set default user group for permissions on new pages
EXT:site_package/Configuration/page.tsconfig
TCEMAIN {
    # Owner be_groups UID for new pages
    permissions.groupid = 3
}
Copied!

In this instance, backend group with UID 3 is "test_group". With the configuration above a new page would be created with this group setting instead of the default, even if a user who is not member of that group creates the page:

Page with altered permissions for backend users and groups

Page with altered permissions for backend groups

user

permissions.user
Type
list of strings or integer 0-31
Default
show,edit,delete,new,editcontent

Default permissions for owner user, key list: show, edit, delete, new, editcontent.

Alternatively, it is allowed to set an integer between 0 and 31, indicating which bits corresponding to the key list should be set: show = 1, edit = 2, delete = 4, new = 8, editcontent = 16.

It also possible to set the value copyFromParent to inherit the value from the parent page.

Example: Set permission defaults so that the pages owner can do anything
EXT:site_package/Configuration/page.tsconfig
TCEMAIN.permissions {
    # User can do anything, this is identical to the default value
    user = 31
}
Copied!

userid

permissions.userid
Type
positive integer or string

By default the owner of a newly created page is the user that created or copied the page.

By setting the value of this property to copyFromParent the owner group is copied from the newly created pages parent page.

When this property is set to a positive integer the owner of new pages is hardcoded to the user of that uid.

Example: Set default user for permissions on new pages
EXT:site_package/Configuration/page.tsconfig
TCEMAIN {
    # Owner be_users UID for new pages
    permissions.userid = 2
}
Copied!

In this instance, backend user with UID 2 is "test". With the configuration above a new page would be created with this owner setting instead of the default, even if another user creates the page:

Page with altered permissions for backend users

Page with altered permissions for backend users

preview

preview
Type
array

Configure preview link generated for the save+view button and other frontend view related buttons in the backend. This allows to have different preview URLs depending on the record type. A common use case is to have previews for blog or news records, and this feature allows you to define a different preview page for content elements as well, which might be handy if those are stored in a sysfolder.

EXT:site_package/Configuration/page.tsconfig
TCEMAIN.preview {
    disableButtonForDokType = 199, 254, 255
    <table name> {
        previewPageId = 123
        useDefaultLanguageRecord = 0
        fieldToParameterMap {
            uid = tx_myext_pi1[showUid]
        }
        additionalGetParameters {
            tx_myext_pi1.special = HELLO # results in tx_myext_pi1[special]
        }
    }
}
Copied!

The previewPageId is the uid of the page to use for preview. If this setting is omitted the current page will be used. If the current page is not a normal page, the root page will be chosen.

The disableButtonForDokType setting allows you to disable the preview button for a given list of doktypes. If none are configured, this defaults to: 199, 254, 255 (Spacer, Folder and Recycler).

The useDefaultLanguageRecord defaults to 1 and ensures that translated records will use the uid of the default record for the preview link. You may disable this, if your extension can deal with the uid of translated records.

The fieldToParameterMap is a mapping which allows you to select fields of the record to be included as GET-parameters in the preview link. The key specifies the field name and the value specifies the GET-parameter name.

Finally additionalGetParameters allow you to add arbitrary GET-parameters and even override others. If the plugin on your target page shows a list of records by default you will also need something like tx_myext_pi1.action = show to ensure the record details are displayed.

The core automatically sets the "no_cache" and the "L" parameter. The language matches the language of the current record. You may override each parameter by using the additionalGetParameters configuration option.

table

Processing options for tables. The table name is added, for instance TCEMAIN.table.pages.disablePrependAtCopy = 1 or TCEMAIN.table.tt_content.disablePrependAtCopy = 1.

It is also possible to set a default value for all tables, for example TCEMAIN.default.disablePrependAtCopy = 1.

translateToMessage

translateToMessage
Type
string
Default
Translate to %s:

Defines the string that will be prepended to some field values if you copy an element to another language version. This applies to all fields where the TCA columns property l10n_mode is set to prefixLangTitle.

The special string "%s" will be replaced with the language title.

You can globally disable the prepending of the string by setting translateToMessage to an empty string. You can disable the message to a certain field by setting the l10n_mode to an empty string.

Example: Set a German prefix for newly translated records

PageTSconfig
TCEMAIN {
    translateToMessage = Bitte in "%s" übersetzen:
}
Copied!

Example: Disable the "[Translate to ...]" prefix

PageTSconfig
TCEMAIN {
    translateToMessage =
}
Copied!

templates

New in version 12.0

All Fluid templates rendered by backend controllers can be overridden with own templates on a per-file basis. The feature is available for basically all core backend modules, as well as the backend main frame templates. Exceptions are email templates and templates of the install tool.

Basic syntax

The various combinations are best explained by example:

The linkvalidator extension (its composer name is typo3/cms-linkvalidator) comes with a backend module in the Web main section. The page tree is displayed for this module and linkvalidator has two main views and templates:

Resources/Private/Templates/Backend/Report.html for the Report view and another for the Check link view. To override the Backend/Report.html file with a custom template, this definition can be added to the Configuration/page.tsconfig file of an extension:

EXT:site_package/Configuration/page.tsconfig
# Left pattern (before equal sign): templates."composer-name"."something-unique"
# Right pattern (after equal sign): "overriding-extension-composer-name":"entry-path"
templates.typo3/cms-linkvalidator {
    1643293191 = my-vendor/my-extension:Resources/Private/TemplateOverrides
}
Copied!

If the target extension, identified by its composer name my-vendor/my-extension, provides the Resources/Private/TemplateOverrides/Templates/Backend/Report.html file, this file is used instead of the default template file from the linkvalidator extension.

All core extensions follow the general structure for templates, layouts and partials file. If an extension needs to override a partial that is located in Resources/Private/Partials/SomeName/SomePartial.html, and an override has been specified like above to my-vendor/my-extension:Resources/Private/TemplateOverrides, the system looks for the Resources/Private/TemplateOverrides/Partials/SomeName/SomePartial.html file. Similar is the case for layouts.

Template overriding is based on the existence of files: Two files are never merged. An override definition either takes effect because it actually provides a file at the correct position with the correct file name, or it does not and the default is used. This can become impractical for large template files. In such cases it might be an option to request a split of a large template file into smaller partial files so an extension can override a specific partial only.

Combinations of overrides

Due to the nature of TSconfig and its two types page TSconfig and user TSconfig, various combinations are possible:

  • Define "global" overrides with page TSconfig in Configuration/page.tsconfig of an extension. This works for all modules, regardless of whether the module renders a page tree or not.
  • Define page level overrides via the TSconfig field of page records. As always with page TSconfig, subpages and subtrees inherit these settings from their parent pages.
  • Define overrides on user or (better) group level. As always, user TSconfig can override page TSconfig by prefixing any setting available as page TSconfig with page. in user TSconfig. A user TSconfig template override starts with page.templates. instead of templates..

Usage in own modules

Extensions with backend modules that use the simplified backend module template API automatically enable the general backend template override feature. Extension authors do not need to further prepare their extensions to enable template overrides by other extensions.

tx_*

The tx_ prefix key is not used in the Core itself, and is just a reserved space for extensions to never collide with core options, a use case could be tx_news for the news extension. Extension developers should create a key like that: tx_[extension key with no underscore]

auth

The auth key is used for configuration of authentication services.

Properties

auth.BE.redirectToURL

auth.BE.redirectToURL
Type
string

Specifies a URL to redirect to after login is performed in the backend login form. This has been used in the past to redirect a backend user to the frontend to use frontend editing.

auth.mfa.required

auth.mfa.required
Type
boolean

Require multi-factor authentication for a user. This overrules the global configuration and can therefore also be used to unset the requirement by using 0 as value.

EXT:site_package/Configuration/user.tsconfig
auth.mfa.required = 1
Copied!

auth.mfa.disableProviders

auth.mfa.disableProviders
Type
string, comma separated list of strings

Disable multi-factor authentication providers for the current user or group. It overrules the configuration from the Backend usergroup "Access List". This means, if a provider is allowed in "Access List" but disallowed with TSconfig, it will be disallowed for the user or user group.

Example: Disable a multi-factor authentication provider

EXT:site_package/Configuration/user.tsconfig
auth.mfa.disableProviders := addToList(totp)
Copied!

auth.mfa.recommendedProvider

auth.mfa.recommendedProvider
Type
string

Set a recommended multi-factor authentication provider on a per user or user group basis, which overrules the global configuration.

options

Various options for the user affecting the Core at various points.

As an example, this enables the Flush frontend caches button in the upper right toolbar cache menu for non-admin users:

EXT:site_package/Configuration/user.tsconfig
options.clearCache.pages = 1
Copied!

Properties

additionalPreviewLanguages

additionalPreviewLanguages
Type
list of sys_language IDs

The user will see these additional languages when localizing stuff in TCEforms. The list are IDs of site languages, as defined in the languageId property of the site configuration.

alertPopups

alertPopups
Type
bitmask
Default
255 (show all warnings)

Configure which Javascript popup alerts have to be displayed and which not:

  • 1 – onTypeChange
  • 2 – copy / move / paste
  • 4 – delete
  • 8 – FE editing
  • 128 – other (not used yet)

bookmarkGroups

bookmarkGroups
Type
Array of integers / strings

Set groups of bookmarks that can be accessed by the user. This affects the bookmarks toolbar item in the top right of the backend.

By default, 5 default groups will be defined globally (shared, can only be set by admins) and also for each user (personal bookmarks):

  1. Pages
  2. Records
  3. Files
  4. Tools
  5. Miscellaneous

Set 0 to disable one of these group IDs, 1 to enable it (this is the default) or "string" to change the label accordingly.

Example:

EXT:site_package/Configuration/user.tsconfig
bookmarkGroups {
  1 = 1
  2 = My Group
  3 = 0
  4 =
}
Copied!

Bookmark group 1 is loaded with the default label (Pages), group 2 is loaded and labeled as "My Group" and groups 3 and 4 are disabled. Group 5 has not been set, so it will be displayed by default, just like group 1.

New in version 11.0

Custom language labels can also be used instead of a fixed label:

EXT:site_package/Configuration/user.tsconfig
bookmarkGroups {
  2 = LLL:EXT:sitepackage/Resources/Private/Language/locallang_be.xlf:bookmarkGroups.2
}
Copied!

clearCache

clearCache.all

clearCache.all
Type
boolean
Default
0

This will allow a non-admin user to clear frontend and page-related caches, plus some backend-related caches (that is everything including templates); if it is explicitly set to 0 for an admin user, it will remove the clear all option on toolbar for that user.

clearCache.pages

clearCache.pages
Type
boolean
Default
0

If set to 1, this will allow a non-admin user to clear frontend and page-related caches.

clipboardNumberPads

clipboardNumberPads
Type
integer (0-20)
Default
3

This allows you to enter how many pads you want on the clipboard.

contextMenu disableItems

contextMenu.table.[tableName][.context].disableItems
Type
list of items

List of context menu ("clickmenu") items to disable.

Context menu of the page tree

Context menu of the page tree

The [tableName] refers to the type of the record (database table name) the context menu is shown for, for example, pages, sys_file, tt_content, etc.

The optional key [.context] refers to the place from which the context menu is triggered. The Core uses just one context called tree for context menus triggered from page tree and folder tree. This way you can disable certain options for one context, but keep them for another.

Items to disable for "page" type are:

  • view
  • edit
  • new
  • info
  • copy
  • copyRelease
  • cut
  • cutRelease
  • pasteAfter
  • pasteInto
  • newWizard
  • pagesSort
  • pagesNewMultiple
  • openListModule
  • mountAsTreeRoot
  • hideInMenus
  • showInMenus
  • permissions
  • enable
  • disable
  • delete
  • history
  • clearCache

Items to disable for "sys_file" type (that is files/folders) are:

  • edit
  • rename
  • upload
  • new
  • info
  • copy
  • copyRelease
  • cut
  • cutRelease
  • pasteInto
  • delete

When the system extension Import/Export (EXT:impexp) is installed then two more options become available:

  • exportT3d
  • importT3d

Example:

EXT:site_package/Configuration/user.tsconfig
# Remove "New" and "Create New wizard" for pages context menu (list module)
options.contextMenu.table.pages.disableItems = new,newWizard

# Remove "New" and "Create New wizard" in page tree context menu
options.contextMenu.table.pages.tree.disableItems = new,newWizard

# Remove the "More options" item in the page tree context menu and all its subelements
options.contextMenu.table.pages.tree.disableItems = newWizard, pagesSort, pagesNewMultiple, openListModule, mountAsTreeRoot, exportT3d, importT3d, hideInMenus, showInMenus, permissions
Copied!

createFoldersInEB

Changed in version 12.4

dashboard

dashboard.dashboardPresetsForNewUsers

dashboard.dashboardPresetsForNewUsers
Type
list of dashboard identifiers
Default
default

List of dashboard identifiers to be used on initial dashboard module access.

Example:

EXT:site_package/Configuration/user.tsconfig
options.dashboard.dashboardPresetsForNewUsers := addToList(customDashboard)
Copied!

defaultResourcesViewMode

defaultResourcesViewMode
Type
list or tiles
Default
tiles

The option options.defaultResourcesViewMode has been introduced, which allows to define the initial display mode. Valid values are therefore list and tiles, e.g.:

The listing of resources in the TYPO3 Backend, e.g. in the File > Filelist module or the FileBrowser can be changed between list and tiles. TYPO3 serves by default tiles, if the user has not already made a choice.

EXT:site_package/Configuration/user.tsconfig
options.defaultResourcesViewMode = list
Copied!

defaultUploadFolder

defaultUploadFolder
Type
string

When a user uploads files they are stored in the default upload folder of the first file storage that user may access. The folder is used for uploads in the TCEforms fields. In general, this will be fileadmin/user_upload/.

With this property it is possible to set a specific upload folder.

The syntax is "storage_uid:file_path".

Example:

EXT:site_package/Configuration/user.tsconfig
options.defaultUploadFolder = 2:user_folders/my_folder/
Copied!

disableDelete

disableDelete
Type
boolean

Disables the Delete button in TCEFORMs.

Note, it is possible to set this for single tables using options.disableDelete.<tableName>. Any value set for a single table will override the default value set for disableDelete.

Example:

EXT:site_package/Configuration/user.tsconfig
options.disableDelete.tt_content = 1
Copied!

dontMountAdminMounts

dontMountAdminMounts
Type
boolean

This options prevents the root to be mounted for an admin user.

enableBookmarks

enableBookmarks
Type
boolean
Default
1

Enables the usage of bookmarks in the backend.

file_list

file_list.enableClipBoard

file_list.enableClipBoard
Type
list of keywords
Default
selectable

Determines whether the checkbox Show clipboard in the file list module is shown or hidden. If it is hidden, you can predefine it to be always activated or always deactivated.

The following values are possible:

activated
The option is activated and the checkbox is hidden.
deactivated
The option is deactivated and the checkbox is hidden.
selectable
The checkbox is shown so that the option can be selected by the user.

file_list.displayColumnSelector

file_list.displayColumnSelector
Type
boolean
Default
true

The column selector is enabled by default and can be disabled with this option. The column selector is displayed at the top of each file list.

It can be used to manage the fields displayed for each file / folder, while containing convenience actions such as "filter", "check all / none" and "toggle selection".

The fields to be selected are a combination of special fields, such as references or read/write permissions, the corresponding sys_file record fields, as well as all available sys_file_metadata fields.

Example:

EXT:site_package/Configuration/user.tsconfig
# Disable the column selector
file_list.displayColumnSelector = 0
Copied!

file_list.enableDisplayBigControlPanel

Changed in version 11.3

The checkbox Extended view was removed with TYPO3 v11.3. Therefore the option file_list.enableDisplayBigControlPanel has no effect anymore.

file_list.enableDisplayThumbnails

file_list.enableDisplayThumbnails
Type
list of keywords
Default
selectable

Determines whether the checkbox Display thumbnails in the file list module is shown or hidden. If it is hidden, you can predefine it to be always activated or always deactivated.

The following values are possible:

activated
The option is activated and the checkbox is hidden.
deactivated
The option is deactivated and the checkbox is hidden.
selectable
The checkbox is shown so that the option can be selected by the user.

file_list.filesPerPage

file_list.filesPerPage
Type
integer
Default
40

The maximum number of files shown per page in the File > List module.

file_list.primaryActions

file_list.primaryActions
Type
string
Default
view,metadata,translations,delete

Option to add more primary actions to the list view. The list of actions to be displayed can be given in the TSConfig of the backend user. The actions that can be added are

  • view
  • metadata
  • delete
  • copy
  • cut

translations is always active.

file_list.thumbnail.height

file_list.thumbnail.height
Type
integer
Default
64

All preview images in the file list will be rendered with the configured thumbnail height.

file_list.thumbnail.width

file_list.thumbnail.width
Type
integer
Default
64

All preview images in the file list will be rendered with the configured thumbnail width.

file_list.uploader.defaultAction

file_list.uploader.defaultAction
Type
string
Default
Cancel

Default action for the modal that appears when during file upload a name collision occurs. Possible values:

cancel
Abort the action.
rename
Append the file name with a numerical index.
replace
Override the file with the uploaded one.

folderTree

folderTree.altElementBrowserMountPoints

folderTree.altElementBrowserMountPoints
Type
list of "storageUid:folderName" items

Sets alternative filemounts for use in any folder tree, including in the File > List module, in the element browser and in file selectors.

Each item consists of storage UID followed by a colon and the folder name inside that storage. Separate multiple items by a comma.

For backwards compatibility, defining only a folder name but no storage uid and colon prepended is still supported. Folders without a storage UID prepended are assumed to be located in the default storage, which by default is the fileadmin/ folder. If a folder you specify does not exist it will not get mounted.

Settings this option is effective in workspaces too.

The alternative file mounts are added to the existing ones defined in the user or group configuration.

Example:

EXT:site_package/Configuration/user.tsconfig
options.folderTree.altElementBrowserMountPoints = _temp_/, 2:/templates, 1:/files/images
Copied!

folderTree.hideCreateFolder

Changed in version 12.4

folderTree.uploadFieldsInLinkBrowser

folderTree.uploadFieldsInLinkBrowser
Type
integer
Default
3

This value defines the number of upload fields in the element browser. Default value is 3, if set to 0, no upload form will be shown.

hideModules

Changed in version 12.0

In TYPO3 versions before 12.0 the hideModules option was appended with the module group. This changed with the introduction of the new module registration API in TYPO3 v12. If you are using an older version of TYPO3 please use the version switcher on the top left of this document to go to the respective version.

hideModules
Type
list of module groups or modules

Configure which module groups or modules should be hidden from the main menu.

Example:

EXT:site_package/Configuration/user.tsconfig
# Hide only module groups "file" and "help"
options.hideModules = file, help

# Hide additional modules "info" and "ts" from the "web" group
options.hideModules := addToList(web_info, web_ts)

# Hide only module BeLogLog from "system" group
options.hideModules = system_BelogLog
Copied!

hideRecords

hideRecords.pages

hideRecords.pages
Type
list of page IDs

This setting hides records in the backend user interface. It is not an access restriction but makes defined records invisible. That means in principle those records can still be edited if the user rights allow. This makes sense if only a specialized module should be used to edit those otherwise hidden records.

This option is currently implemented for the pages table only and has an effect in the following places:

  • Page tree navigation frame
  • Web > List module
  • New record wizard

Example:

EXT:site_package/Configuration/user.tsconfig
options.hideRecords.pages = 12,45
Copied!

impexp

impexp.enableExportForNonAdminUser

New in version 10.4.29/11.5.11

impexp.enableExportForNonAdminUser
Type
boolean
Default
0

The import/export module of EXT:impexp is disabled by default for non-admin users. Enable this option, if non-admin users need to use the module and export data. This should only be enabled for trustworthy backend users, as it might impose a security risk.

impexp.enableImportForNonAdminUser

This option was introduced to avoid information disclosure.

impexp.enableImportForNonAdminUser
Type
boolean
Default
0

The import/export module of EXT:impexp is disabled by default for non-admin users. Enable this option, if non-admin users need to use the module and import data. This should only be enabled for trustworthy backend users, as it might impose a security risk.

mayNotCreateEditBookmarks

mayNotCreateEditBookmarks
Type
boolean

If set, the user can not create or edit bookmarks.

noThumbsInEB

noThumbsInEB
Type
boolean

If set, then image thumbnails are not shown in the element browser.

overridePageModule

Changed in version 13.0

This setting has been removed.

Migration

In order to replace the Web > Page module within a third-party extension, such as TemplaVoila, it is possible to create a custom module entry in an extension's Configuration/Backend/Modules.php with the following entry:

EXT:my_extension/Configuration/Backend/Modules.php
return [
    'my_module' => [
        'parent' => 'web',
        'position' => ['before' => '*'],
        'access' => 'user',
        'aliases' => ['web_layout'],
        'path' => '/module/my_module',
        'iconIdentifier' => 'module-page',
        'labels' => 'LLL:EXT:backend/Resources/Private/Language/locallang_mod.xlf',
        'routes' => [
            '_default' => [
                'target' => \MyVendor\MyExtension\Controller\MyController::class . '::mainAction',
            ],
        ],
    ],
];
Copied!

pageTree

pageTree.altElementBrowserMountPoints

pageTree.altElementBrowserMountPoints
Type
list of integers

Sets alternative webmounts for use in the element browser. You separate page IDs by a comma. Non-existing page IDs are ignored. If you insert a non-integer it will evaluate to "0" (zero) and the root of the page tree is mounted. Effective in workspaces too.

These alternative webmounts replace configured DB mount points unless you use the altElementBrowserMountPoints.append option.

Example:

EXT:site_package/Configuration/user.tsconfig
options.pageTree.altElementBrowserMountPoints = 34,123
Copied!

pageTree.altElementBrowserMountPoints.append

pageTree.altElementBrowserMountPoints.append
Type
boolean

This option allows administrators to add additional mount points in the RTE and the wizard element browser instead of replacing the configured database mount points of the user when using the existing user TSconfig option.

Example:

EXT:site_package/Configuration/user.tsconfig
options.pageTree.altElementBrowserMountPoints = 34,123
options.pageTree.altElementBrowserMountPoints.append = 1
Copied!

pageTree.backgroundColor

Deprecated since version 13.1

This setting has been deprecated and will be removed in TYPO3 v14 due to its lack of accessibility. It is being replaced with a new label system for tree nodes.

In TYPO3 v13 the setting will be migrated to the new label system. Since the use case is unknown, the generated label will be "Color: <value>". This information will be displayed on all affected nodes.

pageTree.backgroundColor
Type
string

Set background colors for tree branches.

The color can be any valid CSS color value. The best results can be achieved by using RGBa values.

Example:

EXT:site_package/Configuration/user.tsconfig
# The syntax is:
# options.pageTree.backgroundColor.<pageId> = <color>
options.pageTree.backgroundColor.147 = orange
options.pageTree.backgroundColor.148 = #AFAFAF
options.pageTree.backgroundColor.151 = rgba(0, 255, 0, 0.1)
Copied!
Tree branches with configured background colors

Tree branches with configured background colors

pageTree.doktypesToShowInNewPageDragArea

pageTree.doktypesToShowInNewPageDragArea
Type
string
Default
1,6,4,7,3,254,255,199

If set, the node top panel feature can be configured by a comma-separated list. Each number stands for a doktype ID that should be added to the node top panel.

Top panel in normal mode

Top panel in normal mode

Top panel modified

Top panel modified

pageTree.excludeDoktypes

pageTree.excludeDoktypes
Type
list of integers

Excludes nodes (pages) with one of the defined doktypes from the page tree. Can be used, for example, for hiding custom doktypes.

Example:

EXT:site_package/Configuration/user.tsconfig
options.pageTree.excludeDoktypes = 254,1
Copied!

pageTree.label

New in version 13.1

pageTree.label.<page-id>
Type
list of page IDs

Labels offer customizable color markings for tree nodes and require an associated label for accessibility.

Example:

EXT:my_extension/Configuration/user.tsconfig
options.pageTree.label.296 {
  label = Campaign A
  color = #ff8700
}
Copied!

Display:

Page with configured color and label

Page with configured color and label

pageTree.showDomainNameWithTitle

pageTree.showDomainNameWithTitle
Type
boolean

If set, the domain name will be appended to the page title for pages that have Is root of web site? checked in the page properties. Useful if there are several domains in one page tree.

pageTree.showNavTitle

pageTree.showNavTitle
Type
boolean

If set, the navigation title is displayed in the page navigation tree instead of the normal page title. The page title is shown in a tooltip if the mouse hovers the navigation title.

pageTree.showPageIdWithTitle

pageTree.showPageIdWithTitle
Type
boolean

If set, the titles in the page tree will have their ID numbers printed before the title.

pageTree.showPathAboveMounts

pageTree.showPathAboveMounts
Type
boolean

If set, the user db mount path above the mount itself is shown. This is useful if you work a lot with user db mounts.

Active user db mount

Active user db mount

passwordReset

passwordReset
Type
boolean
Default
1

If set to 0 the initiating of the password reset in the backend will be disabled. This does not affect the password reset by CLI command.

To completely disable the password reset in the backend for all users, you can set the user TSconfig globally in your Configuration/user.tsconfig:

EXT:site_package/Configuration/user.tsconfig
options.passwordReset = 0
Copied!

If required, this setting can be overridden on a per user basis in the corresponding TSconfig field of the backend usergroup or user.

The password reset functionality can also be disabled globally by setting:

config/system/settings.php | typo3conf/system/settings.php
$GLOBALS['TYPO3_CONF_VARS']['BE']['passwordReset'] = false
Copied!

saveClipboard

saveClipboard
Type
boolean

If set, the clipboard content will be preserved for the next login. Normally the clipboard content lasts only during the session.

saveDocNew

saveDocNew
Type
boolean / "top"
Default
1

If set, a button Save and create new will appear in TCEFORMs.

Note, it is possible to set this for single tables using options.saveDocNew.[tableName]. Any value set for a single table will override the default value set for saveDocNew.

Example:

In this example the button is disabled for all tables, except tt_content where it will appear, and in addition create the records in the top of the page (default is after instead of top).

EXT:site_package/Configuration/user.tsconfig
options.saveDocNew = 0
options.saveDocNew.tt_content = top
Copied!

saveDocView

saveDocView
Type
boolean
Default
1

If set, a button Save and view will appear in TCEFORMs.

Note, it is possible to set this for single tables using options.saveDocView.[tableName]. Any value set for a single table will override the default value set for saveDocView.

showDuplicate

showDuplicate
Type
boolean
Default
0

If set, a button Duplicate will appear in TCEFORMs.

Note, that it is possible to set this for single tables using options.showDuplicate.[tableName]. Any value set for a single table will override the default value set for showDuplicate.

showHistory

showHistory
Type
boolean

Shows link to the history for the record in TCEFORMs.

Note, it is possible to set this for single tables using options.showHistory.[tableName]. Any value set for a single table will override the default value set for showHistory.

page

Override any page TSconfig property on a user or group basis by prefixing the according property path with page.. Find more information about this in the Using and setting section.

Example:

EXT:site_package/Configuration/user.tsconfig
page.TCEMAIN.table.pages.disablePrependAtCopy = 1
Copied!

permissions

Set permissions on a user or group basis. This is especially useful for access permissions on files and folders as part of the Digital assets management (FAL) of the core.

Read more about FAL access permissions in the permission chapter of the core API document, but find some examples below:

EXT:site_package/Configuration/user.tsconfig
# Allow to create and upload files on all storages
permissions.file.default.addFile = 1

# Allow to add new folders if user has write permissions on parent folder
permissions.file.default.addFolder = 1

# Allow to edit contents of files on FAL storage with uid 1
permissions.file.storage.1.writeFile = 1
Copied!

setup

Default values and override values for the User Settings module.

The User > User settings module may only represent a subset of the options from the table below.

Default values and overriding values in the "User > User settings" module

Default values and overriding values in the User > User settings module

Properties from the list below are available the different prefixes setup.default and setup.override, and there is another prefix to hide single fields:

Properties

setup.default.[someProperty]

setup.default.[someProperty]
Type
any

This sets default values of the property. A user may override these using its User Settings module. This affects only new users who did not login yet. It is not usually not possible to set new defaults for users who already logged in at least once. The only way to apply new defaults to existing users is by Reset Backend User Preferences in the Admin tools > Maintenance section of the install tool.

EXT:site_package/Configuration/user.tsconfig
[backend.user.isAdmin]
    # Some settings an administrator might find helpful
    setup.default {
        recursiveDelete = 1
        copyLevels = 99
        moduleData {
            # Defaulting some options of the Template/TypoScript backend module
            web_ts {
                # Pre-select 'Object browser' instead of 'Constant editor'
                function = TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController
                # Pre-select 'Setup' instead of 'Constants'
                ts_browser_type = setup
                # The other settings
                ts_browser_const = subst
                ts_browser_fixedLgd = 0
                ts_browser_showComments = 1
            }
        }
    }
[END]
Copied!

setup.override.[someProperty]

setup.override.[someProperty]
Type
mixed

This forces values for the properties of the list below, a user can not override these setting in its User settings module. So, overriding values will be impossible for the user to change himself and no matter what the current value is, the overriding value will overrule it.

setup.fields.[fieldName].disabled

setup.fields.[fieldName].disabled
Type
boolean

On top of being able to set default values or override them, it is also possible to hide fields in the User Settings module, using setup.fields.[fieldName].disabled = 1. You can find the names of the fields in the Configuration module by browsing the "User Settings" array, example:

EXT:site_package/Configuration/user.tsconfig
# Do not show the 'emailMeAtLogin' field to the user in "User Settings" module
setup.fields.emailMeAtLogin.disabled = 1

# And force the value of this field to be set to 1
setup.override.emailMeAtLogin = 1
Copied!

backendTitleFormat

backendTitleFormat
Type
string

Format of window title in backend. Possible values:

titleFirst
[title] · [sitename]
sitenameFirst
[sitename] · [title]

copyLevels

copyLevels
Type
positive integer

Recursive Copy: Enter the number of page sub-levels to include, when a page is copied

edit_docModuleUpload

edit_docModuleUpload
Type
boolean

Allow file upload directly from file reference fields within backend forms.

emailMeAtLogin

emailMeAtLogin
Type
boolean

Notify me by email, when somebody logs into my account

lang

lang
Type
language-key

One of the language keys. For current options see Supported languages, for example dk, de, es etc.

neverHideAtCopy

neverHideAtCopy
Type
boolean

If set, then the hideAtCopy feature for records in TCE will not be used.

showHiddenFilesAndFolders

showHiddenFilesAndFolders
Type
boolean

If set, hidden files and folders will be shown in the filelist.

startModule

startModule
Type
string

Name of the module that is called when the user logs into the backend, for example web_layout, web_list, web_view, web_info, web_ts etc.

titleLen

titleLen
Type
positive integer

Maximum length of rendered record titles in the backend interface. It is used in several places: page tree, edit masks, workspace module, etc.

TCAdefaults

This allows to set or override the default values of TCA fields that is available for various TCA types, for instance for type=input.

The full path of a setting include the table and the field name: TCAdefaults.[table name].[field]

This key is also available on Page TSconfig level, the order of default values when creating new records in the backend is this:

  1. Value from $GLOBALS['TCA']
  2. Value from User TSconfig (these settings)
  3. Value from Page TSconfig
  4. Value from "defVals" GET variables
  5. Value from previous record based on 'useColumnsForDefaultValues'

However the order for default values used by \TYPO3\CMS\Core\DataHandling\DataHandler if a certain field is not granted access to for user will be:

  1. Value from $GLOBALS['TCA']
  2. Value from User TSconfig (these settings)

So these values will be authoritative if the user has no access to the field anyway.

Example:

EXT:site_package/Configuration/user.tsconfig
# Show newly created pages by default
TCAdefaults.pages.hidden = 0
Copied!

If 'hidden' is in the list, it gets overridden with the "neighbor" record value (see \TYPO3\CMS\Backend\Form\FormDataProvider\DatabaseRowInitializeNew::setDefaultsFromNeighborRow) and as the value is set - usually to '0' - it will not be overridden again. To make it work as expected, that value must be overridden. This can be done for example in the Configuration/TCA/Overrides folder of an extension:

EXT:site_package/Configuration/TCA/Overrides/pages.php
$GLOBALS['TCA']['pages']['ctrl']['useColumnsForDefaultValues'] = 'doktype,fe_group';
Copied!

tx_*

The tx_ prefix key is not used in the core itself, and is just a reserved space for extensions to never collide with core options, a use case could be tx_news for the news extension. Extension developers should create a key like that: tx_[extension key with no underscore]

Sitemap

web_ts

Changed in version 12.0

The Web > Template module has been replaced by the Web > TypoScript module. The only option in this namespace has been removed.