Product detail CR: resources band layout select, fields parked in Misc
- customer change request (2026-10-26): Resources = Downloads, the
detail band is simplified - capabilities leave the section, Technical
Highlights move left, the resource cards into the right column
(frontend already built on dev.vitec.com)
- TCA: capabilities, datasheets and downloads moved to the Misc tab -
parked, not removed; their JSON keys are unchanged. The planned
automatic newest-datasheet/documentation cards stay deferred by
request (the download route already serves the newest file per
Collateral convention, so the foundation is there)
- new resources_layout select on the Resources tab, English label and
description: Layout 1 = 50-50 (default, highlights left / cards
right), Layout 2 = 33-33-33 (highlights over two columns, cards in
the third); ext_tables.sql column added
- the manual resource card restype vocabulary gains Datasheet and
Brochure (select items plus icon picker seeds, no code change - the
renderer passes restype through as type): an editor can pin a single
datasheet card by linking the download record, which stays current
because the download route always serves the newest file
- ProductShowJsonRenderer: the resources envelope gains sectionLayout
('50-50'|'33-33-33'); verified live - Diamond-H delivers 33-33-33,
untouched products the 50-50 default, layout/items unchanged
- spec bumped to v1.26 (additive revision row, field table 7.15.1),
mirrored; frontend briefing notes the new key
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
8adbe8cc90
commit
46049bf30d
5 files changed
+42
-12
No files matched your search
@@ -255,7 +255,12 @@ class ProductShowJsonRenderer
|
|||||||
'solutions' => $this->getProductSolutions($uid),
|
'solutions' => $this->getProductSolutions($uid),
|
||||||
// Detail-only like heroimage: resource cards are detail-page
|
// Detail-only like heroimage: resource cards are detail-page
|
||||||
// furniture a list never shows.
|
// furniture a list never shows.
|
||||||
'resources' => $this->getProductResources($uid),
|
'resources' => array_merge(
|
||||||
|
$this->getProductResources($uid),
|
||||||
|
// Section layout (customer CR 2026-10-26): how the front end
|
||||||
|
// arranges the Technical Highlights / Resources band.
|
||||||
|
['sectionLayout' => (string)(($product['resources_layout'] ?? '') ?: '50-50')]
|
||||||
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
// schema.org JSON-LD (Product + optional VideoObject) as a ready-to-emit
|
// schema.org JSON-LD (Product + optional VideoObject) as a ready-to-emit
|
||||||
|
|||||||
@@ -23,13 +23,13 @@ return [
|
|||||||
],
|
],
|
||||||
],
|
],
|
||||||
'types' => [
|
'types' => [
|
||||||
'1' => ['showitem' => 'title, subtitle, slug, teaser, description, description2, applications, capabilities, highlights, contentelement, contentelementcta, portfolio, showdatapath, textrelatedproducts, relatedprodukt, related_texts, solutions,
|
'1' => ['showitem' => 'title, subtitle, slug, teaser, description, description2, applications, highlights, contentelement, contentelementcta, portfolio, showdatapath, textrelatedproducts, relatedprodukt, related_texts, solutions,
|
||||||
--div--;Resources, resources, datasheets, downloads,
|
--div--;Resources, resources, resources_layout,
|
||||||
--div--;SEO, seotitle, urltitle, seometa, keywords, structureddata,
|
--div--;SEO, seotitle, urltitle, seometa, keywords, structureddata,
|
||||||
--div--;Images and Videos, heroimage, productimage, ogimage, video, videofile,
|
--div--;Images and Videos, heroimage, productimage, ogimage, video, videofile,
|
||||||
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories, categories,
|
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories, categories,
|
||||||
--div--;Visibility, hideonapp, hideonwebsite, hideondatasheets, hideonproducts, shortcut, shortcutpid,
|
--div--;Visibility, hideonapp, hideonwebsite, hideondatasheets, hideonproducts, shortcut, shortcutpid,
|
||||||
--div--;Misc, legacy, supportproduct, subproduct,
|
--div--;Misc, capabilities, datasheets, downloads, legacy, supportproduct, subproduct,
|
||||||
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access, hidden, starttime, endtime'],
|
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access, hidden, starttime, endtime'],
|
||||||
],
|
],
|
||||||
'columns' => [
|
'columns' => [
|
||||||
@@ -465,6 +465,23 @@ return [
|
|||||||
'enableMultiSelectFilterTextfield' => true,
|
'enableMultiSelectFilterTextfield' => true,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
// Resources band layout (customer CR 2026-10-26): the detail page pairs
|
||||||
|
// the Technical Highlights with the resource cards; capabilities left the
|
||||||
|
// band (field parked in the Misc tab, still in the JSON for now).
|
||||||
|
'resources_layout' => [
|
||||||
|
'exclude' => true,
|
||||||
|
'label' => 'Resources Section Layout',
|
||||||
|
'description' => 'How the detail page arranges the Technical Highlights / Resources band. Layout 1 (default): Technical Highlights on the left, resource cards on the right (50/50). Layout 2: Technical Highlights spread over two columns, resource cards in the third (33/33/33).',
|
||||||
|
'config' => [
|
||||||
|
'type' => 'select',
|
||||||
|
'renderType' => 'selectSingle',
|
||||||
|
'default' => '50-50',
|
||||||
|
'items' => [
|
||||||
|
['label' => 'Layout 1 - 50/50 (Technical Highlights left, Resources right)', 'value' => '50-50'],
|
||||||
|
['label' => 'Layout 2 - 33/33/33 (Technical Highlights in two columns, Resources in the third)', 'value' => '33-33-33'],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
'resources' => [
|
'resources' => [
|
||||||
'exclude' => true,
|
'exclude' => true,
|
||||||
'label' => 'Resources',
|
'label' => 'Resources',
|
||||||
|
|||||||
@@ -2,10 +2,12 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Resource cards on the product's Resources tab (decision 2026-09-24):
|
* Resource cards on the product's Resources tab (decision 2026-09-24):
|
||||||
* documentation / support entries, several per type, each an editable card
|
* documentation / support / datasheet / brochure entries, several per type,
|
||||||
* (title, text, icon) around one link. Datasheets are NOT an option here -
|
* each an editable card (title, text, icon) around one link. A manual
|
||||||
* they are the `datasheets` MM selection of download records next to this
|
* datasheet card links the download record directly - the download route
|
||||||
* list and join the same JSON envelope as ready-made cards. Child table of
|
* always serves the newest file, so the card never goes stale. The old
|
||||||
|
* `datasheets` MM selection next to this list still joins the same JSON
|
||||||
|
* envelope but is parked in the Misc tab (CR 2026-10-26). Child table of
|
||||||
* tx_vitec_domain_model_product via the `resources` inline field - edited
|
* tx_vitec_domain_model_product via the `resources` inline field - edited
|
||||||
* only there (hideTable), no Extbase model on purpose: the headless
|
* only there (hideTable), no Extbase model on purpose: the headless
|
||||||
* renderers query the rows directly, the Extbase path never touches them.
|
* renderers query the rows directly, the Extbase path never touches them.
|
||||||
@@ -61,6 +63,8 @@ return [
|
|||||||
'items' => [
|
'items' => [
|
||||||
['label' => 'Product Documentation', 'value' => 'documentation'],
|
['label' => 'Product Documentation', 'value' => 'documentation'],
|
||||||
['label' => 'Technical Support', 'value' => 'support'],
|
['label' => 'Technical Support', 'value' => 'support'],
|
||||||
|
['label' => 'Datasheet', 'value' => 'datasheet'],
|
||||||
|
['label' => 'Brochure', 'value' => 'brochure'],
|
||||||
],
|
],
|
||||||
'default' => 'documentation',
|
'default' => 'documentation',
|
||||||
],
|
],
|
||||||
@@ -98,6 +102,8 @@ return [
|
|||||||
'items' => [
|
'items' => [
|
||||||
['label' => 'Document', 'value' => 'document'],
|
['label' => 'Document', 'value' => 'document'],
|
||||||
['label' => 'Support', 'value' => 'support'],
|
['label' => 'Support', 'value' => 'support'],
|
||||||
|
['label' => 'Datasheet', 'value' => 'datasheet'],
|
||||||
|
['label' => 'Brochure', 'value' => 'brochure'],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
| | |
|
| | |
|
||||||
|---|---|
|
|---|---|
|
||||||
| **Document identifier** | EVO‑VITEC‑HL‑001 |
|
| **Document identifier** | EVO‑VITEC‑HL‑001 |
|
||||||
| **Version** | 1.25 |
|
| **Version** | 1.26 |
|
||||||
| **Status** | Released |
|
| **Status** | Released |
|
||||||
| **Date** | 2026‑10‑23 |
|
| **Date** | 2026‑10‑26 |
|
||||||
| **Applies to** | `evomedien/vitec` on TYPO3 v14.3 (headless) |
|
| **Applies to** | `evomedien/vitec` on TYPO3 v14.3 (headless) |
|
||||||
| **Owner** | evomedien — VITEC relaunch |
|
| **Owner** | evomedien — VITEC relaunch |
|
||||||
|
|
||||||
@@ -38,6 +38,7 @@
|
|||||||
| 1.23 | 2026‑10‑09 | **New interface (additive).** Product type-ahead for the megamenu catalog panel: lean page type `?type=7385&q=` (7.16) returning `suggestions` and up to six product cards via Solr, last term completed as a prefix. The megamenu gained the panel layout `catalog`, filled by the VITEC listener `ProvideProductCatalog` (main categories → subcategory groups → products with one-line teasers). |
|
| 1.23 | 2026‑10‑09 | **New interface (additive).** Product type-ahead for the megamenu catalog panel: lean page type `?type=7385&q=` (7.16) returning `suggestions` and up to six product cards via Solr, last term completed as a prefix. The megamenu gained the panel layout `catalog`, filled by the VITEC listener `ProvideProductCatalog` (main categories → subcategory groups → products with one-line teasers). |
|
||||||
| 1.24 | 2026‑10‑23 | **Interface change (additive).** New frontend layout **22 Solution Group Page** for the eight solution group hero pages (zones hero = `colPos1`, main = `colPos0`). Element order: `vitec_markethero` + `vitec_introparagraph` in the hero zone; `vitec_marketintro` 2, `vitec_introparagraph` + 4 `text_only` cards (challenges), `vitec_introparagraph` + 4 alternating `horizontal`/`horizontal_reverse` cards (capabilities, bullets as `<ul>`), `vitec_usecaselist` (testimonials, shipped hidden until stories are picked), `vitec_marketinsights`, `vitec_ctabanner` in main — imported from the agency Template‑06 workbooks by `vitec:import-solution-group-workbooks`; page properties as on the sub‑solution pages. |
|
| 1.24 | 2026‑10‑23 | **Interface change (additive).** New frontend layout **22 Solution Group Page** for the eight solution group hero pages (zones hero = `colPos1`, main = `colPos0`). Element order: `vitec_markethero` + `vitec_introparagraph` in the hero zone; `vitec_marketintro` 2, `vitec_introparagraph` + 4 `text_only` cards (challenges), `vitec_introparagraph` + 4 alternating `horizontal`/`horizontal_reverse` cards (capabilities, bullets as `<ul>`), `vitec_usecaselist` (testimonials, shipped hidden until stories are picked), `vitec_marketinsights`, `vitec_ctabanner` in main — imported from the agency Template‑06 workbooks by `vitec:import-solution-group-workbooks`; page properties as on the sub‑solution pages. |
|
||||||
| 1.25 | 2026‑10‑23 | **Interface change (additive).** The markets branch is aligned with the agreed agency structure: `/markets` eleven market hero pages their sub‑market pages (the use‑case level stays sections per 7.17). New frontend layout **23 Market Hero Page** (zones hero = `colPos1`, main = `colPos0`): `vitec_markethero` (CTA anchors `#submarkets`) + `vitec_introparagraph` (header carries the hero H1) in the hero zone; `vitec_marketintro`, `vitec_introparagraph`, sub‑market `vitec_card`s whose `primary_cta` links the child page, `vitec_ctabanner` in main (`vitec_customerlogos` and `vitec_usecaselist` ship hidden until filled editorially). Imported by `vitec:import-market-hero-workbooks`; the tree itself by `vitec:align-market-pages` (renames with slug redirects, child slugs normalised — this also repairs embedded‑slash slugs). Sub‑market pages gained the full page‑properties set. |
|
| 1.25 | 2026‑10‑23 | **Interface change (additive).** The markets branch is aligned with the agreed agency structure: `/markets` eleven market hero pages their sub‑market pages (the use‑case level stays sections per 7.17). New frontend layout **23 Market Hero Page** (zones hero = `colPos1`, main = `colPos0`): `vitec_markethero` (CTA anchors `#submarkets`) + `vitec_introparagraph` (header carries the hero H1) in the hero zone; `vitec_marketintro`, `vitec_introparagraph`, sub‑market `vitec_card`s whose `primary_cta` links the child page, `vitec_ctabanner` in main (`vitec_customerlogos` and `vitec_usecaselist` ship hidden until filled editorially). Imported by `vitec:import-market-hero-workbooks`; the tree itself by `vitec:align-market-pages` (renames with slug redirects, child slugs normalised — this also repairs embedded‑slash slugs). Sub‑market pages gained the full page‑properties set. |
|
||||||
|
| 1.26 | 2026‑10‑26 | **Interface change (additive).** Product detail resources band simplified (customer CR): the `resources` envelope gains **`sectionLayout`** — `50-50` (default) \| `33-33-33` — from the new per‑product select *Resources Section Layout* (Layout 1: Technical Highlights left, resource cards right, 50/50; Layout 2: highlights over two columns, cards in the third). Capabilities leave the band editorially; the TCA fields `capabilities`, `datasheets` and `downloads` are parked in the Misc tab — all three stay in the payload unchanged. The automatic newest‑datasheet/documentation cards remain deferred; meanwhile the manual card `restype` vocabulary gains `datasheet` and `brochure` — a pinned datasheet card links the download record and stays current because the download route always serves the newest file. |
|
||||||
|
|
||||||
This document is drafted in the style of, and adopts the terminology conventions of,
|
This document is drafted in the style of, and adopts the terminology conventions of,
|
||||||
ISO/IEC/IEEE 42010 (architecture description), ISO/IEC/IEEE 26514 (information for
|
ISO/IEC/IEEE 42010 (architecture description), ISO/IEC/IEEE 26514 (information for
|
||||||
@@ -933,7 +934,7 @@ Produced by `ProductShowJsonRenderer::serializeProduct()`. Members:
|
|||||||
| `ogimage`, `videofile` | object \| null | FAL singletons |
|
| `ogimage`, `videofile` | object \| null | FAL singletons |
|
||||||
| `relatedprodukt` | array | card shape `{uid, title, slug, subtitle, teaser, description, link, images}`, backend order |
|
| `relatedprodukt` | array | card shape `{uid, title, slug, subtitle, teaser, description, link, images}`, backend order |
|
||||||
| `solutions` | array | solution card shape `{uid, title, slug, subtitle, teaser, description, detailUrl, isGroup, image}` via `tx_vitec_product_solution_mm`, backend order; an editor may select individual Generic Solutions or the eight group‑level records (`isGroup: true`, linking to the group page) |
|
| `solutions` | array | solution card shape `{uid, title, slug, subtitle, teaser, description, detailUrl, isGroup, image}` via `tx_vitec_product_solution_mm`, backend order; an editor may select individual Generic Solutions or the eight group‑level records (`isGroup: true`, linking to the group page) |
|
||||||
| `resources` | object | list envelope `{layout, items[]}`: hand‑written cards (`type` `documentation\|support`, `title`, `text`, `icon`, resolved `url` per 9.12; a card without a resolvable link is dropped) followed by the `datasheets` MM selection of download records as `type: datasheet` cards (title/teaser/icon from the record, `url` = the public download route); `layout` is `carousel` above three cards in total — **detail payload only** |
|
| `resources` | object | list envelope `{layout, items[]}`: hand‑written cards (`type` `documentation\|support\|datasheet\|brochure`, `title`, `text`, `icon`, resolved `url` per 9.12; a card without a resolvable link is dropped) followed by the `datasheets` MM selection of download records as `type: datasheet` cards (title/teaser/icon from the record, `url` = the public download route); `layout` is `carousel` above three cards in total; `sectionLayout` (`50-50` default \| `33-33-33`) mirrors the per‑product *Resources Section Layout* select — how the front end arranges the Technical Highlights / Resources band (1.26) — **detail payload only** |
|
||||||
| `jsonLd` | string | ready‑to‑emit schema.org `@graph` (6.6), detail only |
|
| `jsonLd` | string | ready‑to‑emit schema.org `@graph` (6.6), detail only |
|
||||||
|
|
||||||
#### 7.15.2 List payload (`vitec_productlist`, key `products`)
|
#### 7.15.2 List payload (`vitec_productlist`, key `products`)
|
||||||
@@ -1614,4 +1615,4 @@ remediation.
|
|||||||
- Header convention — the uniform header section across CEs, plugins and containers.
|
- Header convention — the uniform header section across CEs, plugins and containers.
|
||||||
- `Configuration/Sets/Vitecset/setup.typoscript` — the single TypoScript entry point.
|
- `Configuration/Sets/Vitecset/setup.typoscript` — the single TypoScript entry point.
|
||||||
|
|
||||||
*End of document EVO‑VITEC‑HL‑001 v1.25.*
|
*End of document EVO‑VITEC‑HL‑001 v1.26.*
|
||||||
@@ -61,6 +61,7 @@ CREATE TABLE tx_vitec_domain_model_product (
|
|||||||
related_texts int(11) DEFAULT '0' NOT NULL,
|
related_texts int(11) DEFAULT '0' NOT NULL,
|
||||||
solutions int(11) DEFAULT '0' NOT NULL,
|
solutions int(11) DEFAULT '0' NOT NULL,
|
||||||
resources int(11) DEFAULT '0' NOT NULL,
|
resources int(11) DEFAULT '0' NOT NULL,
|
||||||
|
resources_layout varchar(20) DEFAULT '50-50' NOT NULL,
|
||||||
datasheets int(11) DEFAULT '0' NOT NULL,
|
datasheets int(11) DEFAULT '0' NOT NULL,
|
||||||
KEY parent (pid)
|
KEY parent (pid)
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in new issue
Block a user