Success-story migration + new plugins + JSON/UX polish
- Success Stories: full migration from old site (48/48, audited), markets n:n, quotation content block, columns content block, pretty SEO detail URLs via SuccessStoryPathRewrite middleware, list/detail split (list page 4 / story page), detailUrl/backUrl - New plugins: VITEC Locations (grid/list/map + RTE map text), VITEC Customer Logos (color/bw logic, only-show-selected), VITEC Card (one plugin for product/story/market/solution with reloading FlexForm + custom backend preview renderer) - Eventlist: layout dropdown (list/grid/teaserbar) in settings - Hero section CB: Images/Video tabs, background video + overlay - Product JSON: full category rootline (parents), fixed missing ConnectionPool import (all-products crash), category tree map - Backend preview CSS: container-query responsive (narrow columns) - Docs: ISO architecture spec, root + extension READMEs Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
aafcb5dcb6
commit
eae40f4286
110 files changed
+8502
-279
No files matched your search
@@ -35,6 +35,41 @@ use TYPO3\CMS\Extbase\Utility\ExtensionUtility;
|
||||
$registerPluginWithFlexForm('Downloadcardcollection', 'Download Card Collection', 'FILE:EXT:vitec/Configuration/FlexForms/Downloadcardcollection.xml', 'vitec-plugin-downloadcardcollection');
|
||||
$registerPluginWithFlexForm('Datasheets', 'Datasheets', 'FILE:EXT:vitec/Configuration/FlexForms/Datasheets.xml');
|
||||
$registerPluginWithFlexForm('Eventlist', 'Event List', 'FILE:EXT:vitec/Configuration/FlexForms/Eventlist.xml', 'vitec-plugin-eventlist');
|
||||
// Locations: lives in the "VITEC" wizard group, titled "VITEC Locations".
|
||||
$GLOBALS['TCA']['tt_content']['columns']['CType']['config']['itemGroups']['vitec']
|
||||
= 'LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:group.header';
|
||||
ExtensionUtility::registerPlugin(
|
||||
'Vitec',
|
||||
'Modelcard',
|
||||
'VITEC Card',
|
||||
'vitec-plugin-modelcard',
|
||||
'vitec',
|
||||
'One card for a Product, Success Story, Market or Solution — all data from the model.',
|
||||
'FILE:EXT:vitec/Configuration/FlexForms/Modelcard.xml'
|
||||
);
|
||||
$GLOBALS['TCA']['tt_content']['types']['vitec_modelcard']['previewRenderer']
|
||||
= \Evomedien\Vitec\Preview\ModelcardPreviewRenderer::class;
|
||||
|
||||
ExtensionUtility::registerPlugin(
|
||||
'Vitec',
|
||||
'Customerlogos',
|
||||
'VITEC Customer Logos',
|
||||
'vitec-plugin-customerlogos',
|
||||
'vitec',
|
||||
'Customer logos in list, grid, carousel or marquee layout.',
|
||||
'FILE:EXT:vitec/Configuration/FlexForms/Customerlogos.xml'
|
||||
);
|
||||
|
||||
ExtensionUtility::registerPlugin(
|
||||
'Vitec',
|
||||
'Locationlist',
|
||||
'VITEC Locations',
|
||||
'vitec-plugin-locationlist',
|
||||
'vitec',
|
||||
'Locations as grid, list or interactive map.',
|
||||
'FILE:EXT:vitec/Configuration/FlexForms/Locationlist.xml'
|
||||
);
|
||||
|
||||
|
||||
// Change frame_class to allow multiple selections.
|
||||
$GLOBALS['TCA']['tt_content']['columns']['frame_class']['config']['renderType'] = 'selectCheckBox';
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
return [
|
||||
'ctrl' => [
|
||||
'title' => 'VITEC Customer',
|
||||
'label' => 'title',
|
||||
'tstamp' => 'tstamp',
|
||||
'crdate' => 'crdate',
|
||||
'sortby' => 'sorting',
|
||||
'delete' => 'deleted',
|
||||
'enablecolumns' => [
|
||||
'disabled' => 'hidden',
|
||||
'starttime' => 'starttime',
|
||||
'endtime' => 'endtime',
|
||||
],
|
||||
'searchFields' => 'title',
|
||||
'iconfile' => 'EXT:vitec/Resources/Public/Icons/vitec-plugin-customerlogos.svg',
|
||||
'security' => [
|
||||
'ignorePageTypeRestriction' => true,
|
||||
],
|
||||
],
|
||||
'types' => [
|
||||
'1' => [
|
||||
'showitem' =>
|
||||
'title, logo, emphasize_logo,
|
||||
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
|
||||
hidden, starttime, endtime',
|
||||
],
|
||||
],
|
||||
'columns' => [
|
||||
'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],
|
||||
],
|
||||
'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)]],
|
||||
],
|
||||
'title' => [
|
||||
'label' => 'Customer Name',
|
||||
'config' => ['type' => 'input', 'size' => 40, 'eval' => 'trim', 'required' => true, 'default' => ''],
|
||||
],
|
||||
'logo' => [
|
||||
'label' => 'Logo',
|
||||
'config' => ['type' => 'file', 'maxitems' => 1, 'allowed' => 'common-image-types'],
|
||||
],
|
||||
'emphasize_logo' => [
|
||||
'label' => 'Emphasize Logo',
|
||||
'description' => 'Highlight this logo (e.g. larger) in the frontend.',
|
||||
'config' => ['type' => 'check', 'renderType' => 'checkboxToggle', 'items' => [['value' => '', 'label' => '']]],
|
||||
],
|
||||
],
|
||||
];
|
||||
@@ -0,0 +1,168 @@
|
||||
<?php
|
||||
return [
|
||||
'ctrl' => [
|
||||
'title' => 'VITEC Location',
|
||||
'label' => 'title',
|
||||
'tstamp' => 'tstamp',
|
||||
'crdate' => 'crdate',
|
||||
'sortby' => 'sorting',
|
||||
'delete' => 'deleted',
|
||||
'enablecolumns' => [
|
||||
'disabled' => 'hidden',
|
||||
'starttime' => 'starttime',
|
||||
'endtime' => 'endtime',
|
||||
],
|
||||
'searchFields' => 'title,slug,city,country,country_code',
|
||||
'iconfile' => 'EXT:vitec/Resources/Public/Icons/vitec-plugin-locationlist.svg',
|
||||
'security' => [
|
||||
'ignorePageTypeRestriction' => true,
|
||||
],
|
||||
],
|
||||
'types' => [
|
||||
'1' => [
|
||||
'showitem' =>
|
||||
'--div--;General,
|
||||
title, slug, country_code,
|
||||
--palette--;Coordinates;coords,
|
||||
--div--;Address,
|
||||
address_company, street, address_additional,
|
||||
--palette--;;cityline,
|
||||
region, country,
|
||||
--div--;Contact & Links,
|
||||
phone, fax, email, contact_link, legal_links,
|
||||
--div--;Marker,
|
||||
marker_label, marker_color, marker_size,
|
||||
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
|
||||
hidden, starttime, endtime',
|
||||
],
|
||||
],
|
||||
'palettes' => [
|
||||
'coords' => ['showitem' => 'latitude, longitude'],
|
||||
'cityline' => ['showitem' => 'postal_code, city'],
|
||||
],
|
||||
'columns' => [
|
||||
'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],
|
||||
],
|
||||
'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)]],
|
||||
],
|
||||
|
||||
// ----------------------------------------------------------- General
|
||||
'title' => [
|
||||
'label' => 'Name',
|
||||
'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',
|
||||
],
|
||||
],
|
||||
'country_code' => [
|
||||
'label' => 'Country Code (ISO 3166-1 alpha-2)',
|
||||
'description' => 'e.g. US, DE, GB',
|
||||
'config' => ['type' => 'input', 'size' => 6, 'max' => 5, 'eval' => 'trim,upper', 'default' => ''],
|
||||
],
|
||||
'latitude' => [
|
||||
'label' => 'Latitude',
|
||||
'config' => ['type' => 'number', 'format' => 'decimal', 'default' => 0, 'range' => ['lower' => -90, 'upper' => 90]],
|
||||
],
|
||||
'longitude' => [
|
||||
'label' => 'Longitude',
|
||||
'config' => ['type' => 'number', 'format' => 'decimal', 'default' => 0, 'range' => ['lower' => -180, 'upper' => 180]],
|
||||
],
|
||||
|
||||
// ----------------------------------------------------------- Address
|
||||
'address_company' => [
|
||||
'label' => 'Company (optional)',
|
||||
'config' => ['type' => 'input', 'size' => 40, 'eval' => 'trim', 'default' => ''],
|
||||
],
|
||||
'street' => [
|
||||
'label' => 'Street',
|
||||
'config' => ['type' => 'input', 'size' => 40, 'eval' => 'trim', 'default' => ''],
|
||||
],
|
||||
'address_additional' => [
|
||||
'label' => 'Additional (optional)',
|
||||
'config' => ['type' => 'input', 'size' => 40, 'eval' => 'trim', 'default' => ''],
|
||||
],
|
||||
'postal_code' => [
|
||||
'label' => 'Postal Code',
|
||||
'config' => ['type' => 'input', 'size' => 10, 'max' => 20, 'eval' => 'trim', 'default' => ''],
|
||||
],
|
||||
'city' => [
|
||||
'label' => 'City',
|
||||
'config' => ['type' => 'input', 'size' => 30, 'eval' => 'trim', 'default' => ''],
|
||||
],
|
||||
'region' => [
|
||||
'label' => 'Region / State (optional)',
|
||||
'description' => 'e.g. GA',
|
||||
'config' => ['type' => 'input', 'size' => 20, 'eval' => 'trim', 'default' => ''],
|
||||
],
|
||||
'country' => [
|
||||
'label' => 'Country (display name)',
|
||||
'config' => ['type' => 'input', 'size' => 30, 'eval' => 'trim', 'default' => ''],
|
||||
],
|
||||
|
||||
// --------------------------------------------------- Contact & Links
|
||||
'phone' => [
|
||||
'label' => 'Phone',
|
||||
'config' => ['type' => 'input', 'size' => 30, 'max' => 100, 'eval' => 'trim', 'default' => ''],
|
||||
],
|
||||
'fax' => [
|
||||
'label' => 'Fax',
|
||||
'config' => ['type' => 'input', 'size' => 30, 'max' => 100, 'eval' => 'trim', 'default' => ''],
|
||||
],
|
||||
'email' => [
|
||||
'label' => 'E-Mail',
|
||||
'config' => ['type' => 'email', 'size' => 40, 'default' => ''],
|
||||
],
|
||||
'contact_link' => [
|
||||
'label' => 'Contact Link',
|
||||
'config' => ['type' => 'link', 'allowedTypes' => ['page', 'url', 'email']],
|
||||
],
|
||||
'legal_links' => [
|
||||
'label' => 'Legal Links',
|
||||
'description' => 'One link per line (page link or URL).',
|
||||
'config' => ['type' => 'text', 'cols' => 40, 'rows' => 3, 'eval' => 'trim'],
|
||||
],
|
||||
|
||||
// ------------------------------------------------------------ Marker
|
||||
'marker_label' => [
|
||||
'label' => 'Marker Label (optional)',
|
||||
'description' => 'Falls back to the location name.',
|
||||
'config' => ['type' => 'input', 'size' => 40, 'eval' => 'trim', 'default' => ''],
|
||||
],
|
||||
'marker_color' => [
|
||||
'label' => 'Marker Color',
|
||||
'config' => ['type' => 'color', 'default' => '#ff6633'],
|
||||
],
|
||||
'marker_size' => [
|
||||
'label' => 'Marker Size (scale, e.g. 0.5)',
|
||||
'config' => [
|
||||
'type' => 'number',
|
||||
'format' => 'decimal',
|
||||
'default' => 0.5,
|
||||
'range' => ['lower' => 0, 'upper' => 5],
|
||||
'slider' => ['step' => 0.05, 'width' => 200],
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
@@ -34,7 +34,7 @@ return [
|
||||
--div--;Detail · Content,
|
||||
content_elements,
|
||||
--div--;Detail · Related,
|
||||
market, solutions, products, categories,
|
||||
markets, solutions, products, categories,
|
||||
--div--;SEO,
|
||||
seo_title, seo_description, no_index, no_follow, canonical_link,
|
||||
--palette--;Open Graph;ogPalette,
|
||||
@@ -182,15 +182,16 @@ return [
|
||||
],
|
||||
|
||||
// --------------------------------------------------- Detail · Related
|
||||
'market' => [
|
||||
'label' => 'Market',
|
||||
'markets' => [
|
||||
'label' => 'Markets',
|
||||
'config' => [
|
||||
'type' => 'select',
|
||||
'renderType' => 'selectSingle',
|
||||
'type' => 'select',
|
||||
'renderType' => 'selectMultipleSideBySide',
|
||||
'foreign_table' => 'tx_vitec_domain_model_market',
|
||||
'items' => [['label' => '', 'value' => 0]],
|
||||
'default' => 0,
|
||||
'maxitems' => 1,
|
||||
'MM' => 'tx_vitec_usecase_market_mm',
|
||||
'size' => 6,
|
||||
'autoSizeMax' => 20,
|
||||
'maxitems' => 9999,
|
||||
],
|
||||
],
|
||||
'solutions' => [
|
||||
|
||||
Reference in new issue
Block a user