Zwischenstand vom 29.05.2026
This commit is contained in:
34
packages/vitec/Configuration/Backend/Modules.php
Normal file
34
packages/vitec/Configuration/Backend/Modules.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Evomedien\Vitec\Controller\OgImageController;
|
||||
|
||||
return [
|
||||
'web_vitecogimage' => [
|
||||
'parent' => 'web',
|
||||
'position' => ['after' => 'web_info'],
|
||||
'access' => 'user',
|
||||
'workspaces' => 'live',
|
||||
'path' => '/module/web/vitec-ogimage',
|
||||
'labels' => [
|
||||
'title' => 'LLL:EXT:vitec/Resources/Private/Language/locallang_ogimage.xlf:mlang_tabs_tab',
|
||||
'shortDescription' => 'LLL:EXT:vitec/Resources/Private/Language/locallang_ogimage.xlf:mlang_labels_tabdescr',
|
||||
],
|
||||
'extensionName' => 'Vitec',
|
||||
'iconIdentifier' => 'vitec-ogimage',
|
||||
'routes' => [
|
||||
'_default' => [
|
||||
'target' => OgImageController::class . '::indexAction',
|
||||
],
|
||||
'generate' => [
|
||||
'target' => OgImageController::class . '::generateAction',
|
||||
'methods' => ['POST'],
|
||||
],
|
||||
'preview' => [
|
||||
'target' => OgImageController::class . '::previewAction',
|
||||
'methods' => ['POST'],
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
22
packages/vitec/Configuration/FlexForms/Container.xml
Executable file
22
packages/vitec/Configuration/FlexForms/Container.xml
Executable file
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<T3DataStructure>
|
||||
<sheets>
|
||||
<sDEF>
|
||||
<ROOT>
|
||||
<sheetTitle>LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:container.flexform.sheet</sheetTitle>
|
||||
<type>array</type>
|
||||
<el>
|
||||
<settings.cssClass>
|
||||
<label>LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:container.cssclass.label</label>
|
||||
<description>LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:container.cssclass.description</description>
|
||||
<config>
|
||||
<type>input</type>
|
||||
<size>30</size>
|
||||
<eval>trim</eval>
|
||||
</config>
|
||||
</settings.cssClass>
|
||||
</el>
|
||||
</ROOT>
|
||||
</sDEF>
|
||||
</sheets>
|
||||
</T3DataStructure>
|
||||
@@ -3,27 +3,22 @@
|
||||
<sheets>
|
||||
<sDEF>
|
||||
<ROOT>
|
||||
<sheetTitle>
|
||||
Select Usecase
|
||||
</sheetTitle>
|
||||
<sheetTitle>Usecase List</sheetTitle>
|
||||
<type>array</type>
|
||||
<el>
|
||||
<settings.usecase>
|
||||
<label>
|
||||
Usecase
|
||||
</label>
|
||||
<settings.debug>
|
||||
<label>Allow Debug Output.</label>
|
||||
<config>
|
||||
<type>select</type>
|
||||
<renderType>selectSingle</renderType>
|
||||
<foreign_table>tx_vitec_domain_model_usecase</foreign_table>
|
||||
<foreign_table_where>AND tx_vitec_domain_model_usecase.hidden = 0 AND tx_vitec_domain_model_usecase.deleted = 0 ORDER BY tx_vitec_domain_model_usecase.title</foreign_table_where>
|
||||
<size>1</size>
|
||||
<minitems>0</minitems>
|
||||
<maxitems>1</maxitems>
|
||||
<type>check</type>
|
||||
<items type="array">
|
||||
<numIndex index="0" type="array">
|
||||
<label>LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.enabled</label>
|
||||
</numIndex>
|
||||
</items>
|
||||
</config>
|
||||
</settings.usecase>
|
||||
</settings.debug>
|
||||
</el>
|
||||
</ROOT>
|
||||
</sDEF>
|
||||
</sheets>
|
||||
</T3DataStructure>
|
||||
</T3DataStructure>
|
||||
|
||||
29
packages/vitec/Configuration/FlexForms/Usecaselist.xml.bak.20260518153402
Executable file
29
packages/vitec/Configuration/FlexForms/Usecaselist.xml.bak.20260518153402
Executable file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<T3DataStructure>
|
||||
<sheets>
|
||||
<sDEF>
|
||||
<ROOT>
|
||||
<sheetTitle>
|
||||
Select Usecase
|
||||
</sheetTitle>
|
||||
<type>array</type>
|
||||
<el>
|
||||
<settings.usecase>
|
||||
<label>
|
||||
Usecase
|
||||
</label>
|
||||
<config>
|
||||
<type>select</type>
|
||||
<renderType>selectSingle</renderType>
|
||||
<foreign_table>tx_vitec_domain_model_usecase</foreign_table>
|
||||
<foreign_table_where>AND tx_vitec_domain_model_usecase.hidden = 0 AND tx_vitec_domain_model_usecase.deleted = 0 ORDER BY tx_vitec_domain_model_usecase.title</foreign_table_where>
|
||||
<size>1</size>
|
||||
<minitems>0</minitems>
|
||||
<maxitems>1</maxitems>
|
||||
</config>
|
||||
</settings.usecase>
|
||||
</el>
|
||||
</ROOT>
|
||||
</sDEF>
|
||||
</sheets>
|
||||
</T3DataStructure>
|
||||
@@ -24,4 +24,8 @@ return [
|
||||
'provider' => SvgIconProvider::class,
|
||||
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-cols-33-66.svg',
|
||||
],
|
||||
'vitec-ogimage' => [
|
||||
'provider' => SvgIconProvider::class,
|
||||
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-ogimage.svg',
|
||||
],
|
||||
];
|
||||
|
||||
@@ -8,28 +8,82 @@ config {
|
||||
}
|
||||
}
|
||||
|
||||
# Headless: Add products field to vitec_productlist
|
||||
# =============================================================================
|
||||
# Headless list-plugin JSON renderers
|
||||
#
|
||||
# `tt_content.list.20.<list_type>` renders the element body for that subtype
|
||||
# (only ever invoked for the matching list_type — safe as-is).
|
||||
#
|
||||
# `tt_content.list.fields.content.fields.<key>` is GLOBAL: without scoping it
|
||||
# would inject <key> into EVERY list plugin's content. Each such field is
|
||||
# therefore guarded with:
|
||||
# stdWrap.if { equals.field = list_type ... } -> empty for other plugins
|
||||
# ifEmptyUnsetKey = 1 -> empty key removed entirely
|
||||
# (headless JsonContentObject honours ifEmptyUnsetKey: '' / false => unset).
|
||||
# =============================================================================
|
||||
|
||||
# --- vitec_productlist --------------------------------------------------------
|
||||
tt_content.list.20.vitec_productlist = USER
|
||||
tt_content.list.20.vitec_productlist {
|
||||
userFunc = Evomedien\Vitec\UserFunc\ProductListJsonRenderer->render
|
||||
}
|
||||
|
||||
# Override the JSON structure for vitec_productlist
|
||||
tt_content.list.fields.content.fields.products = USER
|
||||
tt_content.list.fields.content.fields.products {
|
||||
userFunc = Evomedien\Vitec\UserFunc\ProductListJsonRenderer->render
|
||||
stdWrap.if {
|
||||
value = vitec_productlist
|
||||
equals.field = list_type
|
||||
}
|
||||
ifEmptyUnsetKey = 1
|
||||
}
|
||||
|
||||
# Headless: Add product field to vitec_productshow
|
||||
# --- vitec_productshow --------------------------------------------------------
|
||||
tt_content.list.20.vitec_productshow = USER
|
||||
tt_content.list.20.vitec_productshow {
|
||||
userFunc = Evomedien\Vitec\UserFunc\ProductShowJsonRenderer->render
|
||||
}
|
||||
|
||||
# Override the JSON structure for vitec_productshow
|
||||
tt_content.list.fields.content.fields.product = USER
|
||||
tt_content.list.fields.content.fields.product {
|
||||
userFunc = Evomedien\Vitec\UserFunc\ProductShowJsonRenderer->render
|
||||
stdWrap.if {
|
||||
value = vitec_productshow
|
||||
equals.field = list_type
|
||||
}
|
||||
ifEmptyUnsetKey = 1
|
||||
}
|
||||
|
||||
# --- vitec_usecaselist --------------------------------------------------------
|
||||
tt_content.list.20.vitec_usecaselist = USER
|
||||
tt_content.list.20.vitec_usecaselist {
|
||||
userFunc = Evomedien\Vitec\UserFunc\UsecaseListJsonRenderer->render
|
||||
}
|
||||
|
||||
tt_content.list.fields.content.fields.usecases = USER
|
||||
tt_content.list.fields.content.fields.usecases {
|
||||
userFunc = Evomedien\Vitec\UserFunc\UsecaseListJsonRenderer->render
|
||||
stdWrap.if {
|
||||
value = vitec_usecaselist
|
||||
equals.field = list_type
|
||||
}
|
||||
ifEmptyUnsetKey = 1
|
||||
}
|
||||
|
||||
# --- vitec_usecaseshow --------------------------------------------------------
|
||||
tt_content.list.20.vitec_usecaseshow = USER
|
||||
tt_content.list.20.vitec_usecaseshow {
|
||||
userFunc = Evomedien\Vitec\UserFunc\UsecaseShowJsonRenderer->render
|
||||
}
|
||||
|
||||
tt_content.list.fields.content.fields.usecase = USER
|
||||
tt_content.list.fields.content.fields.usecase {
|
||||
userFunc = Evomedien\Vitec\UserFunc\UsecaseShowJsonRenderer->render
|
||||
stdWrap.if {
|
||||
value = vitec_usecaseshow
|
||||
equals.field = list_type
|
||||
}
|
||||
ifEmptyUnsetKey = 1
|
||||
}
|
||||
|
||||
# Include container (layout) rendering definitions
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
config {
|
||||
pageTitleProviders {
|
||||
vitec {
|
||||
provider = Evomedien\Vitec\PageTitle\ProductPageTitleProvider
|
||||
before = record
|
||||
before = seo
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Headless: Add products field to vitec_productlist
|
||||
tt_content.list.20.vitec_productlist = USER
|
||||
tt_content.list.20.vitec_productlist {
|
||||
userFunc = Evomedien\Vitec\UserFunc\ProductListJsonRenderer->render
|
||||
}
|
||||
|
||||
# Override the JSON structure for vitec_productlist
|
||||
tt_content.list.fields.content.fields.products = USER
|
||||
tt_content.list.fields.content.fields.products {
|
||||
userFunc = Evomedien\Vitec\UserFunc\ProductListJsonRenderer->render
|
||||
}
|
||||
|
||||
# Headless: Add product field to vitec_productshow
|
||||
tt_content.list.20.vitec_productshow = USER
|
||||
tt_content.list.20.vitec_productshow {
|
||||
userFunc = Evomedien\Vitec\UserFunc\ProductShowJsonRenderer->render
|
||||
}
|
||||
|
||||
# Override the JSON structure for vitec_productshow
|
||||
tt_content.list.fields.content.fields.product = USER
|
||||
tt_content.list.fields.content.fields.product {
|
||||
userFunc = Evomedien\Vitec\UserFunc\ProductShowJsonRenderer->render
|
||||
}
|
||||
|
||||
# Include container (layout) rendering definitions
|
||||
@import 'EXT:vitec/Configuration/TypoScript/Headless/vitec_containers.typoscript'
|
||||
|
||||
# Ensure headless's content element JSON definitions take precedence over
|
||||
# fluid_styled_content's HTML definitions. This is loaded at the end of the
|
||||
# Vitecset to guarantee winning load order.
|
||||
@import 'EXT:headless/Configuration/TypoScript/ContentElement/*.typoscript'
|
||||
|
||||
# Include menu (navigation) JSON definitions
|
||||
@import 'EXT:vitec/Configuration/TypoScript/Headless/vitec_menus.typoscript'
|
||||
@@ -0,0 +1,82 @@
|
||||
config {
|
||||
pageTitleProviders {
|
||||
vitec {
|
||||
provider = Evomedien\Vitec\PageTitle\ProductPageTitleProvider
|
||||
before = record
|
||||
before = seo
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# =============================================================================
|
||||
# Headless list-plugin JSON renderers
|
||||
#
|
||||
# `tt_content.list.20.<list_type>` renders the element body for that subtype
|
||||
# (only ever invoked for the matching list_type — safe as-is).
|
||||
#
|
||||
# `tt_content.list.fields.content.fields.<key>` is GLOBAL: without scoping it
|
||||
# would inject <key> into EVERY list plugin's content. Each such field is
|
||||
# therefore guarded with:
|
||||
# stdWrap.if { equals.field = list_type ... } -> empty for other plugins
|
||||
# ifEmptyUnsetKey = 1 -> empty key removed entirely
|
||||
# (headless JsonContentObject honours ifEmptyUnsetKey: '' / false => unset).
|
||||
# =============================================================================
|
||||
|
||||
# --- vitec_productlist --------------------------------------------------------
|
||||
tt_content.list.20.vitec_productlist = USER
|
||||
tt_content.list.20.vitec_productlist {
|
||||
userFunc = Evomedien\Vitec\UserFunc\ProductListJsonRenderer->render
|
||||
}
|
||||
|
||||
tt_content.list.fields.content.fields.products = USER
|
||||
tt_content.list.fields.content.fields.products {
|
||||
userFunc = Evomedien\Vitec\UserFunc\ProductListJsonRenderer->render
|
||||
stdWrap.if {
|
||||
value = vitec_productlist
|
||||
equals.field = list_type
|
||||
}
|
||||
ifEmptyUnsetKey = 1
|
||||
}
|
||||
|
||||
# --- vitec_productshow --------------------------------------------------------
|
||||
tt_content.list.20.vitec_productshow = USER
|
||||
tt_content.list.20.vitec_productshow {
|
||||
userFunc = Evomedien\Vitec\UserFunc\ProductShowJsonRenderer->render
|
||||
}
|
||||
|
||||
tt_content.list.fields.content.fields.product = USER
|
||||
tt_content.list.fields.content.fields.product {
|
||||
userFunc = Evomedien\Vitec\UserFunc\ProductShowJsonRenderer->render
|
||||
stdWrap.if {
|
||||
value = vitec_productshow
|
||||
equals.field = list_type
|
||||
}
|
||||
ifEmptyUnsetKey = 1
|
||||
}
|
||||
|
||||
# --- vitec_usecaselist --------------------------------------------------------
|
||||
tt_content.list.20.vitec_usecaselist = USER
|
||||
tt_content.list.20.vitec_usecaselist {
|
||||
userFunc = Evomedien\Vitec\UserFunc\UsecaseListJsonRenderer->render
|
||||
}
|
||||
|
||||
tt_content.list.fields.content.fields.usecases = USER
|
||||
tt_content.list.fields.content.fields.usecases {
|
||||
userFunc = Evomedien\Vitec\UserFunc\UsecaseListJsonRenderer->render
|
||||
stdWrap.if {
|
||||
value = vitec_usecaselist
|
||||
equals.field = list_type
|
||||
}
|
||||
ifEmptyUnsetKey = 1
|
||||
}
|
||||
|
||||
# Include container (layout) rendering definitions
|
||||
@import 'EXT:vitec/Configuration/TypoScript/Headless/vitec_containers.typoscript'
|
||||
|
||||
# Ensure headless's content element JSON definitions take precedence over
|
||||
# fluid_styled_content's HTML definitions. This is loaded at the end of the
|
||||
# Vitecset to guarantee winning load order.
|
||||
@import 'EXT:headless/Configuration/TypoScript/ContentElement/*.typoscript'
|
||||
|
||||
# Include menu (navigation) JSON definitions
|
||||
@import 'EXT:vitec/Configuration/TypoScript/Headless/vitec_menus.typoscript'
|
||||
69
packages/vitec/Configuration/TCA/Overrides/tt_content_vitec_container.php
Executable file
69
packages/vitec/Configuration/TCA/Overrides/tt_content_vitec_container.php
Executable file
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
defined('TYPO3') or die();
|
||||
|
||||
use B13\Container\Tca\ContainerConfiguration;
|
||||
use B13\Container\Tca\Registry;
|
||||
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
|
||||
(static function (): void {
|
||||
$l = 'LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:';
|
||||
|
||||
/** @var Registry $registry */
|
||||
$registry = GeneralUtility::makeInstance(Registry::class);
|
||||
|
||||
$registry->configureContainer(
|
||||
(new ContainerConfiguration(
|
||||
'vitec_container',
|
||||
$l . 'container.title',
|
||||
$l . 'container.description',
|
||||
[
|
||||
[
|
||||
['name' => $l . 'container.column', 'colPos' => 220],
|
||||
],
|
||||
]
|
||||
))
|
||||
->setIcon('EXT:vitec/Resources/Public/Icons/vitec-container.svg')
|
||||
->setGroup('vitec')
|
||||
->setSaveAndCloseInNewContentElementWizard(true)
|
||||
);
|
||||
|
||||
$GLOBALS['TCA']['tt_content']['types']['vitec_container']['showitem'] =
|
||||
'--palette--;;general,
|
||||
header;LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:section.heading,
|
||||
subheader;LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:section.subline,
|
||||
tx_vitec_bg_variant,
|
||||
pi_flexform;LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:container.flexform.label,
|
||||
--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
|
||||
--palette--;;frames,
|
||||
--palette--;;appearanceLinks,
|
||||
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
|
||||
--palette--;;language,
|
||||
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
|
||||
--palette--;;hidden,
|
||||
--palette--;;access';
|
||||
|
||||
// Bind the Container FlexForm to this CType.
|
||||
// Core tt_content.pi_flexform uses ds_pointerField = 'list_type,CType'.
|
||||
// The official helper registers the data structure under the key
|
||||
// '*,vitec_container' (wildcard list_type + CType), which is the
|
||||
// version-proof way to attach a FlexForm to a CType-based element.
|
||||
ExtensionManagementUtility::addPiFlexFormValue(
|
||||
'*',
|
||||
'FILE:EXT:vitec/Configuration/FlexForms/Container.xml',
|
||||
'vitec_container'
|
||||
);
|
||||
|
||||
ExtensionManagementUtility::addPageTSConfig(<<<TSCONFIG
|
||||
mod.wizards.newContentElement.wizardItems.vitec.elements.vitec_container {
|
||||
iconIdentifier = vitec-container
|
||||
title = LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:container.title
|
||||
description = LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:container.description
|
||||
tt_content_defValues {
|
||||
CType = vitec_container
|
||||
}
|
||||
}
|
||||
TSCONFIG);
|
||||
})();
|
||||
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
defined('TYPO3') or die();
|
||||
|
||||
use B13\Container\Tca\ContainerConfiguration;
|
||||
use B13\Container\Tca\Registry;
|
||||
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
|
||||
(static function (): void {
|
||||
$l = 'LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:';
|
||||
|
||||
/** @var Registry $registry */
|
||||
$registry = GeneralUtility::makeInstance(Registry::class);
|
||||
|
||||
$registry->configureContainer(
|
||||
(new ContainerConfiguration(
|
||||
'vitec_container',
|
||||
$l . 'container.title',
|
||||
$l . 'container.description',
|
||||
[
|
||||
[
|
||||
['name' => $l . 'container.column', 'colPos' => 220],
|
||||
],
|
||||
]
|
||||
))
|
||||
->setIcon('EXT:vitec/Resources/Public/Icons/vitec-container.svg')
|
||||
->setGroup('vitec')
|
||||
->setSaveAndCloseInNewContentElementWizard(true)
|
||||
);
|
||||
|
||||
$GLOBALS['TCA']['tt_content']['types']['vitec_container']['showitem'] =
|
||||
'--palette--;;general,
|
||||
header;LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:section.heading,
|
||||
subheader;LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:section.subline,
|
||||
tx_vitec_bg_variant,
|
||||
pi_flexform,
|
||||
--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
|
||||
--palette--;;frames,
|
||||
--palette--;;appearanceLinks,
|
||||
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
|
||||
--palette--;;language,
|
||||
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
|
||||
--palette--;;hidden,
|
||||
--palette--;;access';
|
||||
|
||||
// Bind the Container FlexForm to this CType.
|
||||
// Core tt_content.pi_flexform uses ds_pointerField = 'list_type,CType',
|
||||
// so the CType value is a valid data-structure key.
|
||||
$GLOBALS['TCA']['tt_content']['columns']['pi_flexform']['config']['ds']['vitec_container'] =
|
||||
'FILE:EXT:vitec/Configuration/FlexForms/Container.xml';
|
||||
|
||||
ExtensionManagementUtility::addPageTSConfig(<<<TSCONFIG
|
||||
mod.wizards.newContentElement.wizardItems.vitec.elements.vitec_container {
|
||||
iconIdentifier = vitec-container
|
||||
title = LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:container.title
|
||||
description = LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:container.description
|
||||
tt_content_defValues {
|
||||
CType = vitec_container
|
||||
}
|
||||
}
|
||||
TSCONFIG);
|
||||
})();
|
||||
@@ -87,3 +87,14 @@ tt_content.vitec_cols_33_33_33 =< tt_content.vitec_cols_50_50
|
||||
tt_content.vitec_cols_25_25_25_25 =< tt_content.vitec_cols_50_50
|
||||
tt_content.vitec_cols_66_33 =< tt_content.vitec_cols_50_50
|
||||
tt_content.vitec_cols_33_66 =< tt_content.vitec_cols_50_50
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# VITEC · Container — single-column container with a custom CSS class.
|
||||
# Inherits the full structure of the grid containers and adds the `cssClass`
|
||||
# field, read from the element's FlexForm (settings.cssClass).
|
||||
# -----------------------------------------------------------------------------
|
||||
tt_content.vitec_container =< tt_content.vitec_cols_50_50
|
||||
tt_content.vitec_container.fields.cssClass = TEXT
|
||||
tt_content.vitec_container.fields.cssClass.data = flexform:pi_flexform:settings.cssClass
|
||||
tt_content.vitec_container.fields.cssClass.stdWrap.ifEmpty.cObject = TEXT
|
||||
tt_content.vitec_container.fields.cssClass.stdWrap.ifEmpty.cObject.value =
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
# =============================================================================
|
||||
# VITEC container content elements — self-contained JSON rendering
|
||||
# Children collected via Evomedien\Vitec\DataProcessing\ContainerChildrenProcessor
|
||||
# (exception-safe; returns [] on any error, never crashes the outer CE).
|
||||
# =============================================================================
|
||||
|
||||
tt_content.vitec_cols_50_50 = JSON
|
||||
tt_content.vitec_cols_50_50 {
|
||||
fields {
|
||||
id = INT
|
||||
id.field = uid
|
||||
type = TEXT
|
||||
type.field = CType
|
||||
colPos = INT
|
||||
colPos.field = colPos
|
||||
|
||||
categories = COA
|
||||
categories {
|
||||
10 = CONTENT
|
||||
10 {
|
||||
table = sys_category
|
||||
select {
|
||||
pidInList = root
|
||||
selectFields = sys_category.title
|
||||
join = sys_category_record_mm on sys_category_record_mm.uid_local = sys_category.uid
|
||||
where {
|
||||
field = uid
|
||||
wrap = AND sys_category_record_mm.tablenames = 'tt_content' AND sys_category_record_mm.uid_foreign=|
|
||||
}
|
||||
}
|
||||
renderObj = TEXT
|
||||
renderObj {
|
||||
field = title
|
||||
wrap = |###BREAK###
|
||||
}
|
||||
}
|
||||
stdWrap.split {
|
||||
token = ###BREAK###
|
||||
cObjNum = 1 |*|2|*| 3
|
||||
1 {
|
||||
current = 1
|
||||
stdWrap.wrap = |
|
||||
}
|
||||
2 {
|
||||
current = 1
|
||||
stdWrap.wrap = ,|
|
||||
}
|
||||
3 {
|
||||
current = 1
|
||||
stdWrap.wrap = |
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
appearance = JSON
|
||||
appearance {
|
||||
fields {
|
||||
layout = TEXT
|
||||
layout.field = layout
|
||||
frameClass = TEXT
|
||||
frameClass.field = frame_class
|
||||
spaceBefore = TEXT
|
||||
spaceBefore.field = space_before_class
|
||||
spaceAfter = TEXT
|
||||
spaceAfter.field = space_after_class
|
||||
}
|
||||
}
|
||||
|
||||
header = TEXT
|
||||
header.field = header
|
||||
subheader = TEXT
|
||||
subheader.field = subheader
|
||||
tx_vitec_bg_variant = TEXT
|
||||
tx_vitec_bg_variant.field = tx_vitec_bg_variant
|
||||
|
||||
items = JSON
|
||||
items {
|
||||
dataProcessing {
|
||||
10 = Evomedien\Vitec\DataProcessing\ContainerChildrenProcessor
|
||||
10.as = items
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tt_content.vitec_cols_33_33_33 =< tt_content.vitec_cols_50_50
|
||||
tt_content.vitec_cols_25_25_25_25 =< tt_content.vitec_cols_50_50
|
||||
tt_content.vitec_cols_66_33 =< tt_content.vitec_cols_50_50
|
||||
tt_content.vitec_cols_33_66 =< tt_content.vitec_cols_50_50
|
||||
Reference in New Issue
Block a user