[ 'label' => $l . 'bg_variant.label', 'config' => [ 'type' => 'select', 'renderType' => 'selectSingle', 'items' => [ ['label' => $l . 'bg_variant.option.none', 'value' => 'none'], ['label' => $l . 'bg_variant.option.orange', 'value' => 'orange'], ['label' => $l . 'bg_variant.option.blue', 'value' => 'blue'], ['label' => $l . 'bg_variant.option.graphite', 'value' => 'graphite'], ['label' => $l . 'bg_variant.option.midnight', 'value' => 'midnight'], ], 'default' => 'none', ], ], ]); // ------------------------------------------------------------------------- // Shared parent-level setting: column gap scale (1–5) for the whole grid. // Concerns the container itself (not a single column); maps to a spacing // token in the React frontend. Rendered in the "Grid" palette on top of the // Appearance tab, above the per-column rows. // ------------------------------------------------------------------------- ExtensionManagementUtility::addTCAcolumns('tt_content', [ 'tx_vitec_gap' => [ 'label' => $l . 'gap.label', 'config' => [ 'type' => 'select', 'renderType' => 'selectSingle', 'items' => [ ['label' => $l . 'gap.option.1', 'value' => '1'], ['label' => $l . 'gap.option.2', 'value' => '2'], ['label' => $l . 'gap.option.3', 'value' => '3'], ['label' => $l . 'gap.option.4', 'value' => '4'], ['label' => $l . 'gap.option.5', 'value' => '5'], ], 'default' => '3', ], ], ]); // Parent-element palette: settings that concern the whole grid, not a column. $GLOBALS['TCA']['tt_content']['palettes']['vitec_grid'] = [ 'showitem' => 'tx_vitec_gap', ]; // ------------------------------------------------------------------------- // Shared per-column flex alignment fields for the X-column containers. // Positional: col1 = first column, col2 = second, ... (max 4 columns). // "Align" -> CSS align-items (cross-axis alignment of the column's items) // "Justify" -> CSS justify-content (main-axis distribution within the column) // Reused across vitec_cols_50_50 / 33_66 / 66_33 / 33_33_33 / 25_25_25_25. // ------------------------------------------------------------------------- $alignItems = [ ['label' => $l . 'flex.align.flex_start', 'value' => 'flex-start'], ['label' => $l . 'flex.align.center', 'value' => 'center'], ['label' => $l . 'flex.align.flex_end', 'value' => 'flex-end'], ['label' => $l . 'flex.align.stretch', 'value' => 'stretch'], ]; $justifyItems = [ ['label' => $l . 'flex.justify.flex_start', 'value' => 'flex-start'], ['label' => $l . 'flex.justify.center', 'value' => 'center'], ['label' => $l . 'flex.justify.space_between', 'value' => 'space-between'], ['label' => $l . 'flex.justify.space_around', 'value' => 'space-around'], ['label' => $l . 'flex.justify.space_evenly', 'value' => 'space-evenly'], ]; $columnFields = []; for ($i = 1; $i <= 4; $i++) { $columnFields['tx_vitec_col' . $i . '_align'] = [ 'label' => $l . 'flex.align.label', 'config' => [ 'type' => 'select', 'renderType' => 'selectSingle', 'items' => $alignItems, 'default' => 'stretch', ], ]; $columnFields['tx_vitec_col' . $i . '_justify'] = [ 'label' => $l . 'flex.justify.label', 'config' => [ 'type' => 'select', 'renderType' => 'selectSingle', 'items' => $justifyItems, 'default' => 'flex-start', ], ]; } ExtensionManagementUtility::addTCAcolumns('tt_content', $columnFields); // One palette per column: Align + Justify on a single row. The visible row // label is overridden per container in its showitem (--palette--;;). for ($i = 1; $i <= 4; $i++) { $GLOBALS['TCA']['tt_content']['palettes']['vitec_col' . $i . '_flex'] = [ 'showitem' => 'tx_vitec_col' . $i . '_align, tx_vitec_col' . $i . '_justify', ]; } // Register VITEC wizard group header $GLOBALS['TYPO3_CONF_VARS']['BE']['defaultPageTSconfig'] = ($GLOBALS['TYPO3_CONF_VARS']['BE']['defaultPageTSconfig'] ?? '') . "\n" . <<<'TSCONFIG' mod.wizards.newContentElement.wizardItems.vitec { header = LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:group.header show = * } TSCONFIG; })();