TYPO3: overrideChildTca mittels TsConfig

Falls man ermöglichen möchte, dass per TsConfig folgendes erledigt werden kann

TCEFORM.tx_news_domain_model_news.fal_media.config.overrideChildTca.columns.crop.config.cropVariants {
    slim {
        title = Schmal
        allowedAspectRatios {
            5:2 {
                title = 5:2
                value = 2.5
            }
        }
    }
}

muss man etwas nachhelfen.
Denn dies ist in TYPO3 Version 9 so (noch) nicht möglich. Abhilfe schafft ein eigener FormDataProvider, der an der richtigen Stelle eingehakt werden muss. Registriert wird er wie üblich in der ext_localconf.php

$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['formDataGroup']['tcaDatabaseRecord'][YOUR\NAMESPRACE\Backend\Form\FormDataProvider\PageTsConfigFix::class] = [
    'depends' => [
        \TYPO3\CMS\Backend\Form\FormDataProvider\PageTsConfig::class,
    ],
    'before' => [
        \TYPO3\CMS\Backend\Form\FormDataProvider\InlineOverrideChildTca::class
    ]
 ];
<?php
namespace YOUR\NAMESPACE\Backend\Form\FormDataProvider;

use TYPO3\CMS\Backend\Form\FormDataProviderInterface;
use TYPO3\CMS\Core\Utility\ArrayUtility;
use TYPO3\CMS\Core\Utility\GeneralUtility;

class PageTsConfigFix implements FormDataProviderInterface
{
    /**
     * Add page TsConfig
     *
     * @param array $result
     * @return array
     */
    public function addData(array $result)
    {

        if (isset($result['pageTsConfig']['TCEFORM.'])) {

            $tables = $result['pageTsConfig']['TCEFORM.'];
            foreach ($tables as $tableName => $table) {
                if (is_array($table) && $result['tableName'].'.' === $tableName) {
                    foreach ($table as $columnName => $column) {
                        if (isset($column['config.']['overrideChildTca.'])) {
                            $columnName = substr($columnName,0,-1);
                            if (isset($result['processedTca']['columns'][$columnName]['config'])) {
                                $config = GeneralUtility::removeDotsFromTS($column['config.']);
                                ArrayUtility::mergeRecursiveWithOverrule($result['processedTca']['columns'][$columnName]['config'],$config);
                            }
                        }
                    }
                }

            }

        }

        return $result;
    }
}

Dies wird in zukünftige t3bootstrap Versionen mit integriert sein.

Sven Wappler

Webentwickler, Programmierer, TYPO3 Experte

Das könnte Dich auch interessieren …

2 Antworten

  1. Matthias sagt:

    Hi. Ich hab da echt n bisschen n Problem mit… 😀
    Das überschreibt mir die Ratio-Configs in meinen Extensions. Dachte zuerst da kam was mit Typo3 10 und ich muss das deaktivieren, aber liegt an t3bootstrap.
    Hast du da was eingebaut, das es mir erlaubt das zu deaktivieren?

    • Sven Wappler sagt:

      Da ich eine merge verwende, werden vorhandene nicht angetastet. Ist kein TsConfig Einstellung gesetzt, wird es auch nicht verwendet. Von daher kannst du es aus der Konfiguration einfach herausnehmen. Aber wie gesagt, konzipiert ist es für einen Merge.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.