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>
This commit is contained in:
1 parent
c6759186cb
commit
bb7c03235d
237 files changed
+6698
-1749
No files matched your search
@@ -0,0 +1,290 @@
|
||||
<?php
|
||||
return [
|
||||
'ctrl' => [
|
||||
'title' => 'VITEC Event',
|
||||
'label' => 'title',
|
||||
'label_alt' => 'city,eventstart',
|
||||
'tstamp' => 'tstamp',
|
||||
'crdate' => 'crdate',
|
||||
'versioningWS' => true,
|
||||
'languageField' => 'sys_language_uid',
|
||||
'transOrigPointerField' => 'l10n_parent',
|
||||
'transOrigDiffSourceField' => 'l10n_diffsource',
|
||||
'delete' => 'deleted',
|
||||
'default_sortby' => 'eventstart ASC',
|
||||
'enablecolumns' => [
|
||||
'disabled' => 'hidden',
|
||||
'starttime' => 'starttime',
|
||||
'endtime' => 'endtime',
|
||||
],
|
||||
'searchFields' => 'title,teaser,venue,booth,city,country',
|
||||
'iconfile' => 'EXT:vitec/Resources/Public/Icons/tx_vitec_domain_model_event.svg',
|
||||
'security' => [
|
||||
'ignorePageTypeRestriction' => true,
|
||||
],
|
||||
],
|
||||
'types' => [
|
||||
'1' => [
|
||||
'showitem' => 'title, slug, teaser, description,
|
||||
--div--;Event Details, eventstart, eventend, venue, booth, city, country, attendancemode, eventstatus,
|
||||
--div--;Links and Media, eventurl, meetinglink, image,
|
||||
--div--;Visibility, hideonwebsite, hideonapp,
|
||||
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories, categories,
|
||||
--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',
|
||||
],
|
||||
],
|
||||
'columns' => [
|
||||
'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_event',
|
||||
'foreign_table_where' => 'AND {#tx_vitec_domain_model_event}.{#pid}=###CURRENT_PID### AND {#tx_vitec_domain_model_event}.{#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' => [
|
||||
[
|
||||
'label' => '',
|
||||
'invertStateDisplay' => true,
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
'starttime' => [
|
||||
'exclude' => true,
|
||||
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime',
|
||||
'config' => [
|
||||
'type' => 'datetime',
|
||||
'default' => 0,
|
||||
],
|
||||
],
|
||||
'endtime' => [
|
||||
'exclude' => true,
|
||||
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime',
|
||||
'config' => [
|
||||
'type' => 'datetime',
|
||||
'default' => 0,
|
||||
],
|
||||
],
|
||||
|
||||
'title' => [
|
||||
'exclude' => false,
|
||||
'label' => 'Event Name',
|
||||
'config' => [
|
||||
'type' => 'input',
|
||||
'size' => 40,
|
||||
'max' => 255,
|
||||
'eval' => 'trim',
|
||||
'required' => true,
|
||||
],
|
||||
],
|
||||
'slug' => [
|
||||
'exclude' => true,
|
||||
'label' => 'Slug',
|
||||
'config' => [
|
||||
'type' => 'slug',
|
||||
'size' => 50,
|
||||
'generatorOptions' => [
|
||||
'fields' => ['title'],
|
||||
'replacements' => ['/' => '-'],
|
||||
],
|
||||
'fallbackCharacter' => '-',
|
||||
'eval' => 'uniqueInSite',
|
||||
'default' => '',
|
||||
],
|
||||
],
|
||||
'teaser' => [
|
||||
'exclude' => true,
|
||||
'label' => 'Teaser',
|
||||
'config' => [
|
||||
'type' => 'input',
|
||||
'size' => 40,
|
||||
'max' => 255,
|
||||
'eval' => 'trim',
|
||||
],
|
||||
],
|
||||
'description' => [
|
||||
'exclude' => true,
|
||||
'label' => 'Description',
|
||||
'config' => [
|
||||
'type' => 'text',
|
||||
'cols' => 40,
|
||||
'rows' => 8,
|
||||
'enableRichtext' => true,
|
||||
],
|
||||
],
|
||||
|
||||
'eventstart' => [
|
||||
'exclude' => false,
|
||||
'label' => 'Event Start Date',
|
||||
'config' => [
|
||||
'type' => 'datetime',
|
||||
'format' => 'date',
|
||||
'default' => 0,
|
||||
'required' => true,
|
||||
],
|
||||
],
|
||||
'eventend' => [
|
||||
'exclude' => true,
|
||||
'label' => 'Event End Date',
|
||||
'config' => [
|
||||
'type' => 'datetime',
|
||||
'format' => 'date',
|
||||
'default' => 0,
|
||||
],
|
||||
],
|
||||
'venue' => [
|
||||
'exclude' => true,
|
||||
'label' => 'Venue',
|
||||
'description' => 'e.g. "Queen Sirikit National Convention Center (QSNCC)"',
|
||||
'config' => [
|
||||
'type' => 'input',
|
||||
'size' => 40,
|
||||
'max' => 255,
|
||||
'eval' => 'trim',
|
||||
],
|
||||
],
|
||||
'booth' => [
|
||||
'exclude' => true,
|
||||
'label' => 'Booth / Stand',
|
||||
'description' => 'e.g. "Stand H10"',
|
||||
'config' => [
|
||||
'type' => 'input',
|
||||
'size' => 20,
|
||||
'max' => 255,
|
||||
'eval' => 'trim',
|
||||
],
|
||||
],
|
||||
'city' => [
|
||||
'exclude' => true,
|
||||
'label' => 'City',
|
||||
'config' => [
|
||||
'type' => 'input',
|
||||
'size' => 30,
|
||||
'max' => 255,
|
||||
'eval' => 'trim',
|
||||
],
|
||||
],
|
||||
'country' => [
|
||||
'exclude' => true,
|
||||
'label' => 'Country',
|
||||
'config' => [
|
||||
'type' => 'input',
|
||||
'size' => 30,
|
||||
'max' => 255,
|
||||
'eval' => 'trim',
|
||||
],
|
||||
],
|
||||
'attendancemode' => [
|
||||
'exclude' => true,
|
||||
'label' => 'Attendance Mode',
|
||||
'description' => 'Used for schema.org structured data (eventAttendanceMode).',
|
||||
'config' => [
|
||||
'type' => 'select',
|
||||
'renderType' => 'selectSingle',
|
||||
'default' => 'offline',
|
||||
'items' => [
|
||||
['label' => 'On-site (offline)', 'value' => 'offline'],
|
||||
['label' => 'Online', 'value' => 'online'],
|
||||
['label' => 'Hybrid (mixed)', 'value' => 'mixed'],
|
||||
],
|
||||
],
|
||||
],
|
||||
'eventstatus' => [
|
||||
'exclude' => true,
|
||||
'label' => 'Event Status',
|
||||
'description' => 'Used for schema.org structured data (eventStatus).',
|
||||
'config' => [
|
||||
'type' => 'select',
|
||||
'renderType' => 'selectSingle',
|
||||
'default' => 'scheduled',
|
||||
'items' => [
|
||||
['label' => 'Scheduled', 'value' => 'scheduled'],
|
||||
['label' => 'Cancelled', 'value' => 'cancelled'],
|
||||
['label' => 'Postponed', 'value' => 'postponed'],
|
||||
['label' => 'Rescheduled', 'value' => 'rescheduled'],
|
||||
['label' => 'Moved Online', 'value' => 'movedonline'],
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
'eventurl' => [
|
||||
'exclude' => true,
|
||||
'label' => 'Event Website',
|
||||
'config' => [
|
||||
'type' => 'link',
|
||||
'allowedTypes' => ['url', 'page'],
|
||||
],
|
||||
],
|
||||
'meetinglink' => [
|
||||
'exclude' => true,
|
||||
'label' => 'Book-a-Meeting Link',
|
||||
'description' => 'Link or email for the "Book a Meeting" call-to-action.',
|
||||
'config' => [
|
||||
'type' => 'link',
|
||||
'allowedTypes' => ['url', 'email', 'page'],
|
||||
],
|
||||
],
|
||||
'image' => [
|
||||
'exclude' => true,
|
||||
'label' => 'Event Logo / Image',
|
||||
'config' => [
|
||||
'type' => 'file',
|
||||
'maxitems' => 1,
|
||||
'allowed' => 'common-image-types',
|
||||
],
|
||||
],
|
||||
|
||||
'hideonwebsite' => [
|
||||
'exclude' => true,
|
||||
'label' => 'Hide on Website',
|
||||
'config' => [
|
||||
'type' => 'check',
|
||||
'renderType' => 'checkboxToggle',
|
||||
'default' => 0,
|
||||
],
|
||||
],
|
||||
'hideonapp' => [
|
||||
'exclude' => true,
|
||||
'label' => 'Hide in App',
|
||||
'config' => [
|
||||
'type' => 'check',
|
||||
'renderType' => 'checkboxToggle',
|
||||
'default' => 0,
|
||||
],
|
||||
],
|
||||
|
||||
'categories' => [
|
||||
'exclude' => true,
|
||||
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.categories',
|
||||
'config' => [
|
||||
'type' => 'category',
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
Reference in new issue
Block a user