Product texts: mapping completed; product model: solutions + resources
Two work packages, one deploy.
Workbook field mapping completed (2026-09-18)
- highlights <- g:Technical Highlight (new spec-row component of the
full agency delivery; composeGroup() is generic, no change needed)
- applications <- g:Why Choose Card (benefit cards as one block)
- seometa <- new composed source x:seometa (Introduction body trimmed
at a word boundary to ~155 chars - the SEO sheet ships no meta
description, a trimmed intro beats an empty tag)
- teaser stays the hero one-liner, settling the varchar(255) question
- fix: "Save mapping" now merges over the stored mapping instead of
overwriting it - an empty dropdown no longer wipes a stored selector
Product model: solutions relation and Resources tab (2026-09-24)
- closes the gaps the full workbook walkthrough exposed (rows the
import deliberately skips because the model had no place for them)
- solutions: MM multi select to tx_vitec_domain_model_solution
(tx_vitec_product_solution_mm, relatedprodukt pattern), emitted by
both product renderers as solution cards in the shared shape
- Resources tab: inline child table tx_vitec_product_resource - per
entry a type (documentation/support), an editable card title/text,
an icon (free text with a value-picker seed set) and one link
(page/url/file/record via the link wizard). Deliberately no Extbase
model: only the UserFunc path reads the rows.
- datasheets: own MM selection of download records below the resource
list (tx_vitec_product_datasheet_mm); emitted into the SAME
resources envelope as ready-made type=datasheet cards (title/teaser/
icon from the record, url = the public /download/<slug> route, uid
fallback - private/hidden downloads 404 as everywhere)
- JSON `resources` (detail payload only, like heroimage): list envelope
{layout, items[]}; a hand-written card whose link is empty or
unresolvable is not emitted; layout switches to carousel above three
cards in total
- solutions hybrid (same day, after analysing all 100 workbooks: their
Solution Cards reference the 8 GROUPS in 98% of cases): new is_group
flag on the solution model, new idempotent CLI
vitec:create-solution-groups (8 group records; title source is
AlignSolutionsCommand::TARGET - now public -, category = the group's
own category, detail_page = the /solutions group page with -N
disambiguation). Group records are invisible to the solution list
and to vitec:align-solutions and only selectable in the product
relation; product solution cards carry isGroup
- spec raised to v1.18 (7.15 member table, 7.13.3 note, revision row;
the footer had been stuck at v1.15 since 1.16/1.17)
Requires on the server:
vendor/bin/typo3 database:updateschema "*.add,*.change"
vendor/bin/typo3 cache:flush
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
3df66b1353
commit
6811463343
12 files changed
+325
-12
No files matched your search
@@ -24,7 +24,7 @@ return [
|
||||
],
|
||||
'types' => [
|
||||
'1' => ['showitem' => 'title, subtitle, slug, teaser, description, description2, applications, capabilities, highlights, contentelement, contentelementcta, downloads, portfolio, showdatapath, textrelatedproducts, relatedprodukt, solutions,
|
||||
--div--;Resources, resources,
|
||||
--div--;Resources, resources, datasheets,
|
||||
--div--;SEO, seotitle, urltitle, seometa, keywords, structureddata,
|
||||
--div--;Images and Videos, heroimage, productimage, ogimage, video, videofile,
|
||||
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories, categories,
|
||||
@@ -463,6 +463,21 @@ return [
|
||||
],
|
||||
],
|
||||
],
|
||||
'datasheets' => [
|
||||
'exclude' => true,
|
||||
'label' => 'Datasheets',
|
||||
'description' => 'Download records shown as datasheet cards below the resource cards - same card row, counts towards the carousel rule',
|
||||
'config' => [
|
||||
'type' => 'select',
|
||||
'renderType' => 'selectMultipleSideBySide',
|
||||
'foreign_table' => 'tx_vitec_domain_model_download',
|
||||
'MM' => 'tx_vitec_product_datasheet_mm',
|
||||
'size' => 8,
|
||||
'maxitems' => 9999,
|
||||
'minitems' => 0,
|
||||
'enableMultiSelectFilterTextfield' => true,
|
||||
],
|
||||
],
|
||||
'productimage' => [
|
||||
'exclude' => true,
|
||||
'label' => 'Product Image(s)',
|
||||
|
||||
@@ -24,7 +24,7 @@ return [
|
||||
],
|
||||
'types' => [
|
||||
'1' => [
|
||||
'showitem' => 'title, slug, detail_page, subtitle, teaser, description, image,
|
||||
'showitem' => 'title, slug, detail_page, is_group, subtitle, teaser, description, image,
|
||||
--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',
|
||||
@@ -140,6 +140,16 @@ return [
|
||||
'maxitems' => 1,
|
||||
],
|
||||
],
|
||||
'is_group' => [
|
||||
'exclude' => true,
|
||||
'label' => 'Is Group',
|
||||
'description' => 'Group-level record (one of the 8 solution groups, hybrid decision 2026-09-24). Kept out of solution lists and vitec:align-solutions; selectable in the product "Related Solutions" field.',
|
||||
'config' => [
|
||||
'type' => 'check',
|
||||
'renderType' => 'checkboxToggle',
|
||||
'default' => 0,
|
||||
],
|
||||
],
|
||||
'subtitle' => [
|
||||
'exclude' => true,
|
||||
'label' => 'Subtitle',
|
||||
|
||||
@@ -2,8 +2,10 @@
|
||||
|
||||
/**
|
||||
* Resource cards on the product's Resources tab (decision 2026-09-24):
|
||||
* documentation / support / datasheet entries, several per type, each an
|
||||
* editable card (title, text, icon) around one link. Child table of
|
||||
* documentation / support entries, several per type, each an editable card
|
||||
* (title, text, icon) around one link. Datasheets are NOT an option here -
|
||||
* they are the `datasheets` MM selection of download records next to this
|
||||
* list and join the same JSON envelope as ready-made cards. Child table of
|
||||
* tx_vitec_domain_model_product via the `resources` inline field - edited
|
||||
* only there (hideTable), no Extbase model on purpose: the headless
|
||||
* renderers query the rows directly, the Extbase path never touches them.
|
||||
@@ -59,7 +61,6 @@ return [
|
||||
'items' => [
|
||||
['label' => 'Product Documentation', 'value' => 'documentation'],
|
||||
['label' => 'Technical Support', 'value' => 'support'],
|
||||
['label' => 'Datasheet', 'value' => 'datasheet'],
|
||||
],
|
||||
'default' => 'documentation',
|
||||
],
|
||||
@@ -97,7 +98,6 @@ return [
|
||||
'items' => [
|
||||
['label' => 'Document', 'value' => 'document'],
|
||||
['label' => 'Support', 'value' => 'support'],
|
||||
['label' => 'Datasheet', 'value' => 'datasheet'],
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
Reference in new issue
Block a user