Unify list plugins, add solution list and per-story detail page

- vitec_usecaselist: layout + record selection like marketlist
- new plugin vitec_solutionlist (spec 7.13.3, key "solutions")
- tx_vitec_domain_model_usecase: detail_page -> resolved detailUrl
  (also gives story cards in vitec_modelcard a link for the first time)
- "Show Toolbar" checkbox on product/market/solution/usecase lists
- spec bumped to v1.9

BREAKING: vitec_productlist and vitec_usecaselist now emit an object
instead of a bare array. Consumers must read products.products and
usecases.usecases. Also found: productlist had a configurable layout
that was never serialised; it is emitted now, but keeps its own 0-3
vocabulary instead of grid/list/carousel.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
orascheandClaude Opus 5 committed 2026-08-17 16:29:06 +02:00
1 parent 4ef3ad0026
commit 12eb40614b
23 files changed
+559 -28

No files matched your search

@@ -111,6 +111,16 @@ use TYPO3\CMS\Extbase\Utility\ExtensionUtility;
'FILE:EXT:vitec/Configuration/FlexForms/Marketlist.xml'
);
ExtensionUtility::registerPlugin(
'Vitec',
'Solutionlist',
'VITEC Solution List',
'vitec-plugin-solutionlist',
'vitec',
'All solutions as grid, list or carousel.',
'FILE:EXT:vitec/Configuration/FlexForms/Solutionlist.xml'
);
// Change frame_class to allow multiple selections.
$GLOBALS['TCA']['tt_content']['columns']['frame_class']['config']['renderType'] = 'selectCheckBox';
@@ -26,7 +26,7 @@ return [
'1' => [
'showitem' =>
'--div--;General,
title, slug, subtitle,
title, slug, detail_page, subtitle,
--div--;List view,
card_image, customer_logo, teaser,
--div--;Detail · Hero,
@@ -109,6 +109,17 @@ return [
'eval' => 'uniqueInPid',
],
],
'detail_page' => [
'exclude' => true,
'label' => 'Detail Page',
'description' => 'Page that presents this story. Resolved to a URL in the JSON output; leave empty to keep using the list plugin\'s Single PID plus the slug.',
'config' => [
'type' => 'group',
'allowed' => 'pages',
'size' => 1,
'maxitems' => 1,
],
],
'subtitle' => [
'label' => 'Subtitle',
'config' => ['type' => 'input', 'size' => 40, 'eval' => 'trim', 'default' => ''],