Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Editor First: Customizing TYPO3 for a Cleaner ...

Editor First: Customizing TYPO3 for a Cleaner Workflow

In this talk, you'll learn practical ways to make your TYPO3 backends more user-friendly. As integrators, we tend to overlook the editor's perspective, leaving them with complex and overwhelming interfaces.

Instead, we should aim for a clean and simple editing experience. By reducing complexity, we help editors work faster and with more confidence. This saves time, lowers frustration, and prevents mistakes.

We'll look at real-world configuration examples using TSconfig, TCEFORM, TCEMAIN, and TYPO3_CONF_VARS. You'll discover small gems that make a big difference – improving workflows and making TYPO3 feel more intuitive.

#typo3 #t3dd25

Avatar for Ulrich Mathes

Ulrich Mathes

August 08, 2025
Tweet

More Decks by Ulrich Mathes

Other Decks in Education

Transcript

  1. Spend some Love • Disable fields • Special CE for

    special needs • Disable content elements • Have a look into TSconfig, TCEFORM, TCEMAIN, and TYPO3_CONF_VARS • Enable Recycler • Use EXT: content-defender
  2. 1 options.dashboard.dashboardPresetsForNewUsers := addToList(editor) 2 options.saveClipboard = 1 # next

    login instead only during session 3 options.pageTree.showNavTitle = 1 4 options.pageTree.showDomainNameWithTitle= 1 5 options.pageTree.doktypesToShowInNewPageDragArea = 1,6,4,7,3,254,255,199 6 options.pageTree.showPageIdWithTitle = 1 7 options.file_list.enableClipBoard = activated 8 options.file_list.primaryActions = view, metadata, delete, copy, cut, replace, updateOnlineMedia 9 options.showDuplicate.[tablename] = 1 10 admPanel.enable.preview = 1
  3. TCEFORM.pages.media.config.appearance.fileUploadAllowed = 0 [traverse(page, "uid") == 123] options.defaultUploadFolder = 1:/news/

    [END] # TCEFORM.[tableName].[fieldName].types.[typeName].[propertyName] to configure a field for a specific type TCEFORM.tt_content.imageorient.disabled = 1 TCEFORM.tt_content.imageorient.types.teasercard { disabled = 0 label = LLL:EXT:sitepackage/Resources/Private/Language/locallang_db.csv:tt_content.imageorient.teasercard .label keepItems = 0, 25 altLabels { 0 = LLL:EXT:sitepackage/Resources/Private/Language/backend.csv:default.left 25 = LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:right } }
  4. TCEMAIN.default.disableHideAtCopy = 1 TCEMAIN.table.tt_content.disablePrependAtCopy = 1 TCEMAIN.translateToMessage = TCEMAIN.preview.tx_news_domain_model_news {

    previewPageId = 123 # preview page uid useDefaultLanguageRecord = 0 FieldToParameterMap.uid = tx_news_pi1[news_preview] additionalGetParameters { tx_news_pi1.controller = News tx_news_pi1.action = detail } } TCEMAIN.linkHandler.tx_news { handler = TYPO3\CMS\Recordlist\LinkHandler\RecordLinkHandler label = News configuration { table = tx_news_domain_model_news pageTreeMountPoints = 456 # news folder uid } scanAfter = page }
  5. mod.web_list.allowedNewTables = tt_news mod.web_list.deniedNewTables = sys_template mod.web_list.downloadPresets.pages.minimum { label =

    Quick overview columns = uid, title, crdate, slug } mod.web_list.searchLevel.default = -1
  6. TCEFORM.tt_content.CType.removeItems = bullets, header, html, image, list, table, text, textmedia,

    uploads TCEFORM.tt_content.CType { config.readOnly = 1 types.pull-left { config.readOnly = 0 keepItems = pull-left, pull-right } types.pull-right { config.readOnly = 0 keepItems = pull-left, pull-right } }