Files
VITEC-website/packages/vitec/Configuration/TCA/tx_vitec_domain_model_usecase.php
o-rasche bb7c03235d Checkpoint: headless JSON architecture documented + cleanup (Stufe 1+2)
Restore point before Stufe 3 (central resolver-service refactoring).

Includes this session's work:
- Success Story (usecase) rebuild: new fields/tabs, UsecaseSerializer,
  thin List/Show renderers, MM relations, inline content elements.
- vitec_columns content block (two-column layout with per-item content)
  incl. unified header section; special-cased JSON resolution.
- Container per-column flex (items[].config align/justify) + gap on parent.
- Unified header section across CEs/plugins/containers; header fields in JSON.
- ISO-style architecture spec: Documentation/Headless-JSON-Architecture.md.
- Cleanup: removed local scratch + verified .bak backups.
- Fixes: B-6 (undefined thumbnail variable in Downloadcardcollection image
  resolver), B-7 (unsatisfiable legacy CType OR branch in Downloadcard/Datasheets).

Rollback: git reset --hard snapshot-2026-07-09-pre-stufe3

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-09 10:01:56 +02:00

341 lines
15 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
return [
'ctrl' => [
'title' => 'VITEC Success Story',
'label' => 'title',
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
'versioningWS' => true,
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'transOrigDiffSourceField' => 'l10n_diffsource',
'delete' => 'deleted',
'enablecolumns' => [
'disabled' => 'hidden',
'starttime' => 'starttime',
'endtime' => 'endtime',
],
'searchFields' => 'title,slug,subtitle,teaser,seo_title,seo_description',
'iconfile' => 'EXT:vitec/Resources/Public/Icons/tx_vitec_domain_model_usecase.gif',
'security' => [
'ignorePageTypeRestriction' => true,
],
],
'types' => [
'1' => [
'showitem' =>
'--div--;General,
title, slug, subtitle,
--div--;List view,
card_image, customer_logo, teaser,
--div--;Detail · Hero,
hero_bgimage, hero_small_image, hero_video, hero_overlay_color, hero_overlay_opacity,
--div--;Detail · Content,
content_elements,
--div--;Detail · Related,
market, solutions, products, categories,
--div--;SEO,
seo_title, seo_description, no_index, no_follow, canonical_link,
--palette--;Open Graph;ogPalette,
--palette--;Twitter;twitterPalette,
--div--;Appearance,
layout_variant, background_variant, accent_color,
featured, show_related, hero_layout, text_theme,
--palette--;Visibility;visibilityPalette,
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
sys_language_uid, l10n_parent, l10n_diffsource,
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
hidden, starttime, endtime',
],
],
'palettes' => [
'ogPalette' => ['showitem' => 'og_title, og_description, --linebreak--, og_image'],
'twitterPalette' => ['showitem' => 'twitter_title, twitter_description, --linebreak--, twitter_image'],
'visibilityPalette' => ['showitem' => 'hideonwebsite, hideonapp'],
],
'columns' => [
// ------------------------------------------------------------ system
'sys_language_uid' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language',
'config' => ['type' => 'language'],
],
'l10n_parent' => [
'displayCond' => 'FIELD:sys_language_uid:>:0',
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'default' => 0,
'items' => [['label' => '', 'value' => 0]],
'foreign_table' => 'tx_vitec_domain_model_usecase',
'foreign_table_where' => 'AND {#tx_vitec_domain_model_usecase}.{#pid}=###CURRENT_PID### AND {#tx_vitec_domain_model_usecase}.{#sys_language_uid} IN (-1,0)',
],
],
'l10n_diffsource' => ['config' => ['type' => 'passthrough']],
'hidden' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.visible',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [['value' => '', 'label' => '', 'invertStateDisplay' => true]],
],
],
'starttime' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime',
'config' => ['type' => 'datetime', 'default' => 0, 'behaviour' => ['allowLanguageSynchronization' => true]],
],
'endtime' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime',
'config' => ['type' => 'datetime', 'default' => 0, 'range' => ['upper' => mktime(0, 0, 0, 1, 1, 2038)], 'behaviour' => ['allowLanguageSynchronization' => true]],
],
// ----------------------------------------------------------- General
'title' => [
'label' => 'Title',
'config' => ['type' => 'input', 'size' => 40, 'eval' => 'trim', 'required' => true, 'default' => ''],
],
'slug' => [
'label' => 'Slug',
'config' => [
'type' => 'slug',
'size' => 50,
'generatorOptions' => ['fields' => ['title'], 'fieldSeparator' => '-', 'replacements' => ['/' => '']],
'fallbackCharacter' => '-',
'eval' => 'uniqueInPid',
],
],
'subtitle' => [
'label' => 'Subtitle',
'config' => ['type' => 'input', 'size' => 40, 'eval' => 'trim', 'default' => ''],
],
// --------------------------------------------------------- List view
'card_image' => [
'label' => 'Card Image',
'config' => ['type' => 'file', 'maxitems' => 1, 'allowed' => 'common-image-types'],
],
'customer_logo' => [
'label' => 'Customer Logo',
'config' => ['type' => 'file', 'maxitems' => 1, 'allowed' => 'common-image-types'],
],
'teaser' => [
'label' => 'Teaser',
'config' => ['type' => 'text', 'cols' => 40, 'rows' => 4, 'eval' => 'trim'],
],
// ------------------------------------------------------ Detail · Hero
'hero_bgimage' => [
'label' => 'Background Image',
'config' => ['type' => 'file', 'maxitems' => 1, 'allowed' => 'common-image-types'],
],
'hero_small_image' => [
'label' => 'Small Image',
'config' => ['type' => 'file', 'maxitems' => 1, 'allowed' => 'common-image-types'],
],
'hero_video' => [
'label' => 'Video',
'config' => ['type' => 'file', 'maxitems' => 1, 'allowed' => 'mp4,webm,ogv,mov,m4v'],
],
'hero_overlay_color' => [
'label' => 'Overlay Color',
'config' => ['type' => 'color'],
],
'hero_overlay_opacity' => [
'label' => 'Overlay Opacity (01)',
'config' => [
'type' => 'number',
'format' => 'decimal',
'default' => 0,
'range' => ['lower' => 0, 'upper' => 1],
'slider' => ['step' => 0.05, 'width' => 200],
],
],
// --------------------------------------------------- Detail · Content
'content_elements' => [
'label' => 'Content Elements',
'config' => [
'type' => 'inline',
'foreign_table' => 'tt_content',
'foreign_field' => 'tx_vitec_usecase_content',
'foreign_sortby' => 'sorting',
'appearance' => [
'collapseAll' => true,
'expandSingle' => true,
'levelLinksPosition' => 'top',
'showSynchronizationLink' => false,
'showAllLocalizationLink' => false,
'showPossibleLocalizationRecords' => false,
'useSortable' => true,
],
'overrideChildTca' => [
'columns' => [
'colPos' => ['config' => ['default' => 999]],
],
],
],
],
// --------------------------------------------------- Detail · Related
'market' => [
'label' => 'Market',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'foreign_table' => 'tx_vitec_domain_model_market',
'items' => [['label' => '', 'value' => 0]],
'default' => 0,
'maxitems' => 1,
],
],
'solutions' => [
'label' => 'Solutions',
'config' => [
'type' => 'select',
'renderType' => 'selectMultipleSideBySide',
'foreign_table' => 'tx_vitec_domain_model_solution',
'MM' => 'tx_vitec_usecase_solution_mm',
'size' => 6,
'autoSizeMax' => 20,
'maxitems' => 9999,
],
],
'products' => [
'label' => 'Products',
'config' => [
'type' => 'select',
'renderType' => 'selectMultipleSideBySide',
'foreign_table' => 'tx_vitec_domain_model_product',
'MM' => 'tx_vitec_usecase_product_mm',
'size' => 6,
'autoSizeMax' => 20,
'maxitems' => 9999,
],
],
'categories' => ['config' => ['type' => 'category']],
// --------------------------------------------------------------- SEO
'seo_title' => [
'label' => 'SEO Title',
'config' => ['type' => 'input', 'size' => 40, 'eval' => 'trim'],
],
'seo_description' => [
'label' => 'Meta Description',
'config' => ['type' => 'text', 'cols' => 40, 'rows' => 3, 'eval' => 'trim'],
],
'no_index' => [
'label' => 'No Index',
'config' => ['type' => 'check', 'renderType' => 'checkboxToggle', 'items' => [['value' => '', 'label' => '']]],
],
'no_follow' => [
'label' => 'No Follow',
'config' => ['type' => 'check', 'renderType' => 'checkboxToggle', 'items' => [['value' => '', 'label' => '']]],
],
'canonical_link' => [
'label' => 'Canonical URL',
'config' => ['type' => 'link'],
],
'og_title' => [
'label' => 'og:title',
'config' => ['type' => 'input', 'size' => 40, 'eval' => 'trim'],
],
'og_description' => [
'label' => 'og:description',
'config' => ['type' => 'text', 'cols' => 40, 'rows' => 3, 'eval' => 'trim'],
],
'og_image' => [
'label' => 'og:image',
'config' => ['type' => 'file', 'maxitems' => 1, 'allowed' => 'common-image-types'],
],
'twitter_title' => [
'label' => 'twitter:title',
'config' => ['type' => 'input', 'size' => 40, 'eval' => 'trim'],
],
'twitter_description' => [
'label' => 'twitter:description',
'config' => ['type' => 'text', 'cols' => 40, 'rows' => 3, 'eval' => 'trim'],
],
'twitter_image' => [
'label' => 'twitter:image',
'config' => ['type' => 'file', 'maxitems' => 1, 'allowed' => 'common-image-types'],
],
// -------------------------------------------------------- Appearance
'layout_variant' => [
'label' => 'Detail Layout',
'config' => [
'type' => 'select', 'renderType' => 'selectSingle', 'default' => 'standard',
'items' => [
['label' => 'Standard', 'value' => 'standard'],
['label' => 'Wide', 'value' => 'wide'],
['label' => 'Centered', 'value' => 'centered'],
['label' => 'Media-first', 'value' => 'media_first'],
],
],
],
'background_variant' => [
'label' => 'Background',
'config' => [
'type' => 'select', 'renderType' => 'selectSingle', 'default' => 'none',
'items' => [
['label' => 'None', 'value' => 'none'],
['label' => 'Orange', 'value' => 'orange'],
['label' => 'Blue', 'value' => 'blue'],
['label' => 'Graphite', 'value' => 'graphite'],
['label' => 'Midnight', 'value' => 'midnight'],
['label' => 'Light', 'value' => 'light'],
['label' => 'Dark', 'value' => 'dark'],
],
],
],
'accent_color' => [
'label' => 'Accent Color',
'config' => ['type' => 'color'],
],
'hideonwebsite' => [
'exclude' => true,
'label' => 'Hide on Website',
'config' => ['type' => 'check', 'renderType' => 'checkboxToggle', 'items' => [['value' => '', 'label' => '']]],
],
'hideonapp' => [
'exclude' => true,
'label' => 'Hide on App',
'config' => ['type' => 'check', 'renderType' => 'checkboxToggle', 'items' => [['value' => '', 'label' => '']]],
],
'featured' => [
'label' => 'Featured',
'config' => ['type' => 'check', 'renderType' => 'checkboxToggle', 'items' => [['value' => '', 'label' => '']]],
],
'show_related' => [
'label' => 'Show Related section',
'config' => ['type' => 'check', 'renderType' => 'checkboxToggle', 'default' => 1, 'items' => [['value' => '', 'label' => '']]],
],
'hero_layout' => [
'label' => 'Hero Layout',
'config' => [
'type' => 'select', 'renderType' => 'selectSingle', 'default' => 'fullscreen',
'items' => [
['label' => 'Fullscreen', 'value' => 'fullscreen'],
['label' => 'Medium', 'value' => 'md'],
['label' => 'Small', 'value' => 'sm'],
],
],
],
'text_theme' => [
'label' => 'Text Theme',
'config' => [
'type' => 'select', 'renderType' => 'selectSingle', 'default' => 'light',
'items' => [
['label' => 'Light', 'value' => 'light'],
['label' => 'Dark', 'value' => 'dark'],
],
],
],
],
];