Initial Commit

This commit is contained in:
khaccount committed 2026-05-18 14:46:25 +02:00
1 parent 4f495177e4
commit b6d2142214
166 files changed
+13952 -178

No files matched your search

@@ -0,0 +1,4 @@
contentBlocks:
paths:
# Register all content elements under ContentBlocks/ContentElements
- 'EXT:vitec/ContentBlocks/ContentElements/'
@@ -0,0 +1,103 @@
#
# Extension Builder settings for extension vitec
# generated 2025-01-13T15:54:51Z
#
# See http://www.yaml.org/spec/1.2/spec.html
#
############# Overwrite settings ###########
#
# These settings only apply, if the roundtrip feature of the extension builder
# is enabled in the extension manager
#
# Usage:
# nesting reflects the file structure
# a setting applies to a file or recursive to all files and subfolders
#
# merge:
# means for classes: All properties, methods and method bodies
# of the existing class will be modified according to the new settings
# but not overwritten
#
# for locallang.xlf files: Existing keys and labels are always
# preserved (renaming a property or DomainObject will result in new keys and new labels)
#
# for other files: You will find a Split token at the end of the file
# see: \EBT\ExtensionBuilder\Service\RoundTrip::SPLIT_TOKEN
#
# After this token you can write whatever you want and it will be appended
# everytime the code is generated
#
# keep:
# files are never overwritten
# These settings may break the functionality of the extension builder!
# Handle with care!
############# Extension settings ###########
overwriteSettings:
Classes:
Controller: merge
Domain:
Model: merge
Repository: merge
Configuration:
# TCA merge not possible - use overrides directory
#TypoScript: keep
Resources:
Private:
#Language: merge
#Layouts: keep
#Partials: keep
#Templates: keep
Backend:
#Layouts: keep
#Partials: keep
#Templates: keep
user_extension.svg: keep
#ext_localconf.php: merge
#ext_tables.php: merge
#ext_tables.sql: merge
## add declare strict types in php files
declareStrictTypes: true
## use static date attribute in xliff files
#staticDateInXliffFiles: '2025-01-13T15:54:51Z'
## skip docComment (license header)
#skipDocComment: false
## list of error codes for warnings that should be ignored
#ignoreWarnings:
#503
############# settings for classBuilder #######################
#
# here you may define default parent classes for your classes
# these settings only apply for new generated classes
# you may also just change the parent class in the generated class file.
# It will be kept on next code generation, if the overwrite settings
# are configured to merge it
#
#################################################################
classBuilder:
Controller:
parentClass: \TYPO3\CMS\Extbase\Mvc\Controller\ActionController
Model:
AbstractEntity:
parentClass: \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
AbstractValueObject:
parentClass: \TYPO3\CMS\Extbase\DomainObject\AbstractValueObject
Repository:
parentClass: \TYPO3\CMS\Extbase\Persistence\Repository
setDefaultValuesForClassProperties: true
@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<T3DataStructure>
<meta>
<langDisable>1</langDisable>
</meta>
<sheets>
<sDEF>
<ROOT>
<TCEforms>
<sheetTitle>General Settings</sheetTitle>
</TCEforms>
<type>array</type>
<el>
<settings.showFilter>
<TCEforms>
<label>Show Filter</label>
<config>
<type>check</type>
<default>1</default>
</config>
</TCEforms>
</settings.showFilter>
<settings.showSearch>
<TCEforms>
<label>Show Search</label>
<config>
<type>check</type>
<default>1</default>
</config>
</TCEforms>
</settings.showSearch>
<settings.itemsPerPage>
<TCEforms>
<label>Items per Page</label>
<config>
<type>number</type>
<default>20</default>
</config>
</TCEforms>
</settings.itemsPerPage>
<settings.defaultCategory>
<TCEforms>
<label>Default Category</label>
<config>
<type>select</type>
<renderType>selectSingle</renderType>
<foreign_table>tx_vitec_domain_model_downloadcategory</foreign_table>
<foreign_table_where>ORDER BY title</foreign_table_where>
<items>
<numIndex index="0">
<label>All Categories</label>
<value>0</value>
</numIndex>
</items>
</config>
</TCEforms>
</settings.defaultCategory>
</el>
</ROOT>
</sDEF>
</sheets>
</T3DataStructure>
@@ -0,0 +1,119 @@
<?xml version="1.0" encoding="utf-8"?>
<T3DataStructure>
<sheets>
<sDEF>
<ROOT>
<TCEforms>
<sheetTitle>General Settings</sheetTitle>
</TCEforms>
<type>array</type>
<el>
<settings.product>
<label>Select Product</label>
<config>
<type>select</type>
<renderType>selectSingle</renderType>
<items>
<numIndex index="0">
<label>None</label>
<value>0</value>
</numIndex>
</items>
<foreign_table>tx_vitec_domain_model_product</foreign_table>
<foreign_table_where>AND (tx_vitec_domain_model_product.hidden = 0 AND tx_vitec_domain_model_product.deleted = 0) ORDER BY tx_vitec_domain_model_product.title</foreign_table_where>
<size>1</size>
<minitems>0</minitems>
<maxitems>99</maxitems>
</config>
</settings.product>
<settings.download>
<label>Select Download</label>
<config>
<type>select</type>
<renderType>selectSingle</renderType>
<items>
<numIndex index="0">
<label>None</label>
<value>0</value>
</numIndex>
</items>
<foreign_table>tx_vitec_domain_model_download</foreign_table>
<foreign_table_where>AND (tx_vitec_domain_model_download.hidden = 0 AND tx_vitec_domain_model_download.deleted = 0) ORDER BY tx_vitec_domain_model_download.title</foreign_table_where>
<size>1</size>
<minitems>0</minitems>
<maxitems>99</maxitems>
</config>
</settings.download>
<settings.layout>
<label>Layout</label>
<config>
<type>select</type>
<renderType>selectSingle</renderType>
<items>
<numIndex index="0">
<label>
Default Product List
</label>
<value>0</value>
</numIndex>
<numIndex index="1">
<label>
Variation 1 Product List
</label>
<value>1</value>
</numIndex>
<numIndex index="2">
<label>
Variation 2 Product List
</label>
<value>2</value>
</numIndex>
<numIndex index="3">
<label>
Variation 3 Product List
</label>
<value>3</value>
</numIndex>
</items>
</config>
</settings.layout>
<settings.magstyle>
<label>Magazine Style layout</label>
<config>
<type>check</type>
<default>0</default>
</config>
</settings.magstyle>
<settings.adddetaillink>
<label>Add Button to Detail View</label>
<config>
<type>check</type>
<default>0</default>
</config>
</settings.adddetaillink>
<settings.magheader>
<label>Header Text for Magazine Layout</label>
<config>
<type>input</type>
<size>30</size>
</config>
</settings.magheader>
<settings.magtext>
<label>A short Text for Magazine Layout</label>
<config>
<type>input</type>
<size>30</size>
</config>
</settings.magtext>
<settings.maglink>
<label>Link for Magazine Layout</label>
<config>
<type>input</type>
<size>30</size>
</config>
</settings.maglink>
</el>
</ROOT>
</sDEF>
</sheets>
</T3DataStructure>
@@ -0,0 +1,172 @@
<?xml version="1.0" encoding="utf-8"?>
<T3DataStructure>
<sheets>
<sDEF>
<ROOT>
<TCEforms>
<sheetTitle>General Settings</sheetTitle>
</TCEforms>
<type>array</type>
<el>
<settings.image>
<label>Image</label>
<config>
<type>inline</type>
<maxitems>1</maxitems>
<foreign_table>sys_file_reference</foreign_table>
<foreign_table_field>tablenames</foreign_table_field>
<foreign_label>uid_local</foreign_label>
<foreign_sortby>sorting_foreign</foreign_sortby>
<foreign_field>uid_foreign</foreign_field>
<foreign_selector>uid_local</foreign_selector>
<foreign_selector_fieldTcaOverride>
<config>
<appearance>
<elementBrowserType>file</elementBrowserType>
<elementBrowserAllowed>gif,jpg,jpeg,png,svg</elementBrowserAllowed>
</appearance>
</config>
</foreign_selector_fieldTcaOverride>
<foreign_types type="array">
<numIndex index="0">
<showitem>--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,--palette--;;filePalette</showitem>
</numIndex>
<numIndex index="2">
<showitem>--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,--palette--;;filePalette</showitem>
</numIndex>
</foreign_types>
<foreign_match_fields>
<fieldname>image</fieldname> <!-- CAUTION!! Replace "fal" with the variable name of this field! -->
</foreign_match_fields>
<appearance type="array">
<newRecordLinkAddTitle>1</newRecordLinkAddTitle>
<headerThumbnail>
<field>uid_local</field>
<height>64</height>
<width>64</width>
</headerThumbnail>
<enabledControls>
<info>1</info>
<new>0</new>
<dragdrop>0</dragdrop>
<sort>1</sort>
<hide>0</hide>
<delete>1</delete>
<localize>1</localize>
</enabledControls>
<createNewRelationLinkTitle>LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference</createNewRelationLinkTitle>
</appearance>
<behaviour>
<localizationMode>select</localizationMode>
<localizeChildrenAtParentLocalization>1</localizeChildrenAtParentLocalization>
</behaviour>
<overrideChildTca>
<columns type="array">
<uid_local type="array">
<config type="array">
<appearance type="array">
<elementBrowserType>file</elementBrowserType>
<elementBrowserAllowed>jpg,png,svg,jpeg,gif</elementBrowserAllowed>
</appearance>
</config>
</uid_local>
</columns>
<types type="array">
<numIndex index="2">
<showitem>--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,--palette--;;filePalette</showitem>
</numIndex>
</types>
</overrideChildTca>
</config>
</settings.image>
<settings.download>
<label>Select Download</label>
<config>
<type>select</type>
<renderType>selectMultipleSideBySide</renderType>
<items>
<numIndex index="0">
<label>None</label>
<value>0</value>
</numIndex>
</items>
<foreign_table>tx_vitec_domain_model_download</foreign_table>
<foreign_table_where>AND (tx_vitec_domain_model_download.hidden = 0 AND tx_vitec_domain_model_download.deleted = 0) ORDER BY tx_vitec_domain_model_download.title</foreign_table_where>
<size>4</size>
<minitems>0</minitems>
<maxitems>99</maxitems>
</config>
</settings.download>
<settings.layout>
<label>Layout</label>
<config>
<type>select</type>
<renderType>selectSingle</renderType>
<items>
<numIndex index="0">
<label>
Default Product List
</label>
<value>0</value>
</numIndex>
<numIndex index="1">
<label>
Variation 1 Product List
</label>
<value>1</value>
</numIndex>
<numIndex index="2">
<label>
Variation 2 Product List
</label>
<value>2</value>
</numIndex>
<numIndex index="3">
<label>
Variation 3 Product List
</label>
<value>3</value>
</numIndex>
</items>
</config>
</settings.layout>
<settings.magstyle>
<label>Magazine Style layout</label>
<config>
<type>check</type>
<default>0</default>
</config>
</settings.magstyle>
<settings.adddetaillink>
<label>Add Button to Detail View</label>
<config>
<type>check</type>
<default>0</default>
</config>
</settings.adddetaillink>
<settings.magheader>
<label>Header Text for Magazine Layout</label>
<config>
<type>input</type>
<size>30</size>
</config>
</settings.magheader>
<settings.magtext>
<label>A short Text for Magazine Layout</label>
<config>
<type>input</type>
<size>30</size>
</config>
</settings.magtext>
<settings.maglink>
<label>Link for Magazine Layout</label>
<config>
<type>input</type>
<size>30</size>
</config>
</settings.maglink>
</el>
</ROOT>
</sDEF>
</sheets>
</T3DataStructure>
@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<T3DataStructure>
<sheets>
<sDEF>
<ROOT>
<sheetTitle>
Select Market
</sheetTitle>
<type>array</type>
<el>
<settings.debug>
<label>Allow Debug Output.</label>
<config>
<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.debug>
<settings.market>
<label>
Market
</label>
<config>
<type>select</type>
<renderType>selectSingle</renderType>
<foreign_table>tx_vitec_domain_model_market</foreign_table>
<foreign_table_where>AND tx_vitec_domain_model_market.hidden = 0 AND tx_vitec_domain_model_market.deleted = 0 ORDER BY tx_vitec_domain_model_market.title</foreign_table_where>
<size>1</size>
<minitems>0</minitems>
<maxitems>1</maxitems>
</config>
</settings.market>
<settings.layout>
<label>
Layout
</label>
<config>
<type>select</type>
<renderType>selectSingle</renderType>
<items>
<numIndex index="0">
<label>Default Layout</label>
<value>default</value>
</numIndex>
<numIndex index="1">
<label>Card Layout</label>
<value>card</value>
</numIndex>
<numIndex index="2">
<label>Hero Layout</label>
<value>hero</value>
</numIndex>
<numIndex index="3">
<label>Compact Layout</label>
<value>compact</value>
</numIndex>
</items>
<default>default</default>
<size>1</size>
</config>
</settings.layout>
</el>
</ROOT>
</sDEF>
</sheets>
</T3DataStructure>
@@ -0,0 +1,99 @@
<?xml version="1.0" encoding="utf-8"?>
<T3DataStructure>
<sheets>
<sDEF>
<ROOT>
<sheetTitle>
Select Categories
</sheetTitle>
<type>array</type>
<el>
<settings.allproducts>
<label>Show all products disregarding the category selection below.</label>
<config>
<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.allproducts>
<settings.debug>
<label>Allow Debug Output.</label>
<config>
<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.debug>
<settings.categories>
<label>Select Category</label>
<description>
Select one or more categories to filter the products in the product list.
</description>
<config>
<type>select</type>
<renderMode>tree</renderMode>
<renderType>selectTree</renderType>
<treeConfig>
<!-- <dataProvider>GeorgRinger\News\TreeProvider\DatabaseTreeDataProvider</dataProvider>-->
<parentField>parent</parentField>
<appearance>
<maxLevels>99</maxLevels>
<expandAll>TRUE</expandAll>
<showHeader>TRUE</showHeader>
</appearance>
</treeConfig>
<foreign_table>sys_category</foreign_table>
<foreign_table_where>AND (sys_category.sys_language_uid = 0 OR sys_category.l10n_parent = 0) ORDER BY sys_category.sorting</foreign_table_where>
<size>15</size>
<minitems>0</minitems>
<maxitems>99</maxitems>
</config>
</settings.categories>
<settings.layout>
<label>Layout</label>
<description>
Select which layout variation should be used for the product list in the frontend.
</description>
<config>
<type>select</type>
<renderType>selectSingle</renderType>
<items>
<numIndex index="0">
<label>
Default Product List
</label>
<value>0</value>
</numIndex>
<numIndex index="1">
<label>
Variation 1 Product List
</label>
<value>1</value>
</numIndex>
<numIndex index="2">
<label>
Variation 2 Product List
</label>
<value>2</value>
</numIndex>
<numIndex index="3">
<label>
Variation 3 Product List
</label>
<value>3</value>
</numIndex>
</items>
</config>
</settings.layout>
</el>
</ROOT>
</sDEF>
</sheets>
</T3DataStructure>
@@ -0,0 +1,82 @@
<?xml version="1.0" encoding="utf-8"?>
<T3DataStructure>
<sheets>
<sDEF>
<ROOT>
<sheetTitle>
Select Product
</sheetTitle>
<type>array</type>
<el>
<settings.debug>
<label>Allow Debug Output.</label>
<config>
<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.debug>
<settings.product>
<label>
Select Product
</label>
<config>
<type>select</type>
<renderType>selectSingle</renderType>
<items>
<numIndex index="0">
<label>No Product - Use product from URL parameter</label>
<value>0</value>
</numIndex>
</items>
<foreign_table>tx_vitec_domain_model_product</foreign_table>
<foreign_table_where>AND tx_vitec_domain_model_product.hidden = 0 AND tx_vitec_domain_model_product.deleted = 0 ORDER BY tx_vitec_domain_model_product.title</foreign_table_where>
<size>1</size>
<minitems>0</minitems>
<maxitems>1</maxitems>
</config>
</settings.product>
<settings.layout>
<label>Layout</label>
<description>
Select which layout variation should be used for the product in the frontend.
</description>
<config>
<type>select</type>
<renderType>selectSingle</renderType>
<items>
<numIndex index="0">
<label>
Default Product Card
</label>
<value>0</value>
</numIndex>
<numIndex index="1">
<label>
Variation 1 Product Card
</label>
<value>1</value>
</numIndex>
<numIndex index="2">
<label>
Variation 2 Product Card
</label>
<value>2</value>
</numIndex>
<numIndex index="3">
<label>
Variation 3 Product Card
</label>
<value>3</value>
</numIndex>
</items>
</config>
</settings.layout>
</el>
</ROOT>
</sDEF>
</sheets>
</T3DataStructure>
@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<T3DataStructure>
<sheets>
<sDEF>
<ROOT>
<sheetTitle>Simple Card Settings</sheetTitle>
<type>array</type>
<el>
<settings.header>
<label>Header</label>
<config>
<type>input</type>
<size>48</size>
</config>
</settings.header>
<settings.bodytext>
<label>Text</label>
<config>
<type>text</type>
<enableRichtext>1</enableRichtext>
<richtextConfiguration>default</richtextConfiguration>
<cols>48</cols>
<rows>5</rows>
</config>
</settings.bodytext>
<settings.image>
<label>Image</label>
<config>
<type>file</type>
<appearance>
<createNewRelationLinkTitle>Add Image</createNewRelationLinkTitle>
</appearance>
<maxitems>1</maxitems>
<minitems>0</minitems>
<allowed>jpg,jpeg,png,gif,svg</allowed>
<fieldControl>
<editPopup>
<disabled>0</disabled>
</editPopup>
<addFileReference>
<disabled>0</disabled>
</addFileReference>
</fieldControl>
</config>
</settings.image>
<settings.buttontext>
<label>Button Text</label>
<config>
<type>input</type>
<size>30</size>
</config>
</settings.buttontext>
<settings.buttonlink>
<label>Button Link</label>
<config>
<type>input</type>
<renderType>inputLink</renderType>
<size>30</size>
<eval>trim</eval>
</config>
</settings.buttonlink>
</el>
</ROOT>
</sDEF>
</sheets>
</T3DataStructure>
@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<T3DataStructure>
<sheets>
<sDEF>
<ROOT>
<sheetTitle>
Select Solution
</sheetTitle>
<type>array</type>
<el>
<settings.debug>
<label>Allow Debug Output.</label>
<config>
<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.debug>
<settings.solution>
<label>
Solution
</label>
<config>
<type>select</type>
<renderType>selectSingle</renderType>
<foreign_table>tx_vitec_domain_model_solution</foreign_table>
<foreign_table_where>AND tx_vitec_domain_model_solution.hidden = 0 AND tx_vitec_domain_model_solution.deleted = 0 ORDER BY tx_vitec_domain_model_solution.title</foreign_table_where>
<size>1</size>
<minitems>0</minitems>
<maxitems>1</maxitems>
</config>
</settings.solution>
<settings.layout>
<label>
Layout
</label>
<config>
<type>select</type>
<renderType>selectSingle</renderType>
<items>
<numIndex index="0">
<label>Default Layout</label>
<value>default</value>
</numIndex>
<numIndex index="1">
<label>Card Layout</label>
<value>card</value>
</numIndex>
<numIndex index="2">
<label>Hero Layout</label>
<value>hero</value>
</numIndex>
<numIndex index="3">
<label>Compact Layout</label>
<value>compact</value>
</numIndex>
</items>
<default>default</default>
<size>1</size>
</config>
</settings.layout>
</el>
</ROOT>
</sDEF>
</sheets>
</T3DataStructure>
@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<T3DataStructure>
<sheets>
<sDEF>
<ROOT>
<sheetTitle>
Select Usecase
</sheetTitle>
<type>array</type>
<el>
<settings.debug>
<label>Allow Debug Output.</label>
<config>
<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.debug>
<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>
<settings.layout>
<label>
Layout
</label>
<config>
<type>select</type>
<renderType>selectSingle</renderType>
<items>
<numIndex index="0">
<label>Default Layout</label>
<value>default</value>
</numIndex>
<numIndex index="1">
<label>Card Layout</label>
<value>card</value>
</numIndex>
<numIndex index="2">
<label>Hero Layout</label>
<value>hero</value>
</numIndex>
<numIndex index="3">
<label>Compact Layout</label>
<value>compact</value>
</numIndex>
</items>
<default>default</default>
<size>1</size>
</config>
</settings.layout>
</el>
</ROOT>
</sDEF>
</sheets>
</T3DataStructure>
@@ -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>
+27
View File
@@ -0,0 +1,27 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider;
return [
'vitec-cols-50-50' => [
'provider' => SvgIconProvider::class,
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-cols-50-50.svg',
],
'vitec-cols-33-33-33' => [
'provider' => SvgIconProvider::class,
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-cols-33-33-33.svg',
],
'vitec-cols-25-25-25-25' => [
'provider' => SvgIconProvider::class,
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-cols-25-25-25-25.svg',
],
'vitec-cols-66-33' => [
'provider' => SvgIconProvider::class,
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-cols-66-33.svg',
],
'vitec-cols-33-66' => [
'provider' => SvgIconProvider::class,
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-cols-33-66.svg',
],
];
+199
View File
@@ -0,0 +1,199 @@
# ============================================================
# VITEC — Full CKEditor5 Preset
# All available toolbar items, styles, fonts, and options
# ============================================================
imports:
- { resource: 'EXT:rte_ckeditor/Configuration/RTE/Processing.yaml' }
- { resource: 'EXT:rte_ckeditor/Configuration/RTE/Editor/Base.yaml' }
- { resource: 'EXT:rte_ckeditor/Configuration/RTE/Editor/Plugins.yaml' }
editor:
config:
# Load frontend-like classes into RTE iframe for live style preview
contentsCss:
- 'EXT:rte_ckeditor/Resources/Public/Css/contents.css'
- 'EXT:vitec/Resources/Public/Css/rte-content.css'
# ---- Toolbar (all available items) ----------------------
toolbar:
shouldNotGroupWhenFull: true
items:
# Undo / Redo / Cleanup
- undo
- redo
- removeFormat
- selectAll
- '|'
# Find & Replace / Source
- findAndReplace
- sourceEditing
- showBlocks
- fullscreen
- '|'
# Headings & Styles
- heading
- style
- '-'
# Basic formatting
- bold
- italic
- underline
- strikethrough
- subscript
- superscript
- softhyphen
- '|'
# Font
- fontFamily
- fontSize
- fontColor
- fontBackgroundColor
- highlight
- highlight:greenMarker
- '-'
# Lists & Indent
- bulletedList
- numberedList
- blockQuote
- indent
- outdent
- alignment
- horizontalLine
- '|'
# Links & Media
- link
- '|'
# Tables
- insertTable
- tableColumn
- tableRow
- mergeTableCells
- TableProperties
- TableCellProperties
- '-'
# Special
- specialCharacters
- textPartLanguage
# ---- Heading options ------------------------------------
heading:
options:
- { model: 'paragraph', title: 'Paragraph' }
- { model: 'heading1', view: 'h1', title: 'Heading 1' }
- { model: 'heading2', view: 'h2', title: 'Heading 2' }
- { model: 'heading3', view: 'h3', title: 'Heading 3' }
- { model: 'heading4', view: 'h4', title: 'Heading 4' }
- { model: 'heading5', view: 'h5', title: 'Heading 5' }
- { model: 'heading6', view: 'h6', title: 'Heading 6' }
- { model: 'formatted', view: 'pre', title: 'Pre-Formatted Text' }
# ---- Style definitions ----------------------------------
style:
definitions:
# Block level
- { name: 'Lead / Intro', element: 'p', classes: ['lead'] }
- { name: 'Quote / Citation', element: 'blockquote', classes: ['blockquote'] }
- { name: 'Code block', element: 'code' }
# Buttons (VITEC color system)
- { name: 'Button: Orange', element: 'a', classes: ['btn', 'btn-vitec', 'btn-vitec--orange'] }
- { name: 'Button: Blue', element: 'a', classes: ['btn', 'btn-vitec', 'btn-vitec--blue'] }
- { name: 'Button: Graphite', element: 'a', classes: ['btn', 'btn-vitec', 'btn-vitec--graphite'] }
- { name: 'Button: Midnight', element: 'a', classes: ['btn', 'btn-vitec', 'btn-vitec--midnight'] }
- { name: 'Button: Light', element: 'a', classes: ['btn', 'btn-vitec', 'btn-vitec--light'] }
- { name: 'Button: Outline Orange', element: 'a', classes: ['btn', 'btn-vitec', 'btn-vitec--outline-orange'] }
- { name: 'Button: Outline Blue', element: 'a', classes: ['btn', 'btn-vitec', 'btn-vitec--outline-blue'] }
# Inline
- { name: 'Highlight yellow', element: 'mark', classes: ['highlight-yellow'] }
- { name: 'Highlight green', element: 'mark', classes: ['highlight-green'] }
- { name: 'Small text', element: 'small' }
- { name: 'Keyboard input', element: 'kbd' }
- { name: 'Delete / Strike', element: 'del' }
- { name: 'Insert / Underline', element: 'ins' }
# ---- Alignment -----------------------------------------
alignment:
options:
- { name: 'left', className: 'text-start' }
- { name: 'center', className: 'text-center' }
- { name: 'right', className: 'text-end' }
- { name: 'justify', className: 'text-justify' }
# ---- Table defaults ------------------------------------
table:
defaultHeadings: { rows: 1 }
contentToolbar:
- tableColumn
- tableRow
- mergeTableCells
- tableProperties
- tableCellProperties
- toggleTableCaption
# ---- Font family ----------------------------------------
fontFamily:
supportAllValues: false
options:
- 'default'
- 'Arial, sans-serif'
- 'Georgia, serif'
- 'Courier New, monospace'
# ---- Font size ------------------------------------------
fontSize:
options:
- 'default'
- 12
- 14
- 16
- 18
- 20
- 24
- 28
- 32
- 36
- 48
# ---- Font color -----------------------------------------
fontColor:
columns: 6
colors:
- { label: 'VITEC Orange', color: '#F47937' }
- { label: 'VITEC Blue', color: '#26358C' }
- { label: 'VITEC Graphite', color: '#313131' }
- { label: 'VITEC Midnight', color: '#0D0D0D' }
- { label: 'VITEC Light', color: '#CCCCCC' }
- { label: 'Black', color: '#000000' }
- { label: 'White', color: '#FFFFFF' }
# ---- Font background color ------------------------------
fontBackgroundColor:
columns: 6
colors:
- { label: 'VITEC Orange', color: '#F47937' }
- { label: 'VITEC Orange Light', color: '#FBD2BF' }
- { label: 'VITEC Blue', color: '#26358C' }
- { label: 'VITEC Blue Light', color: '#C9D0EE' }
- { label: 'VITEC Graphite', color: '#313131' }
- { label: 'VITEC Midnight', color: '#0D0D0D' }
- { label: 'VITEC Light', color: '#CCCCCC' }
- { label: 'White', color: '#FFFFFF' }
# ---- Highlight -----------------------------------------
highlight:
options:
- { model: 'yellowMarker', class: 'marker-yellow', title: 'Yellow marker', color: '#fdfd77', type: 'marker' }
- { model: 'greenMarker', class: 'marker-green', title: 'Green marker', color: '#63f963', type: 'marker' }
- { model: 'pinkMarker', class: 'marker-pink', title: 'Pink marker', color: '#fc7999', type: 'marker' }
- { model: 'blueMarker', class: 'marker-blue', title: 'Blue marker', color: '#72cdfd', type: 'marker' }
- { model: 'redPen', class: 'pen-red', title: 'Red pen', color: '#e91313', type: 'pen' }
- { model: 'greenPen', class: 'pen-green', title: 'Green pen', color: '#118800', type: 'pen' }
# ---- Special characters --------------------------------
specialCharacters:
order: 'alphabet'
# ---- Word count (optional — remove if not needed) -------
wordCount:
displayWords: true
displayCharacters: true
@@ -0,0 +1,18 @@
services:
_defaults:
autowire: true
autoconfigure: true
public: false
Evomedien\Vitec\:
resource: '../Classes/*'
exclude: '../Classes/Domain/Model/*'
# Make our VitecBackendLayoutView the canonical BackendLayoutView.
# Any service / controller requesting BackendLayoutView gets our override.
Evomedien\Vitec\View\VitecBackendLayoutView:
public: true
TYPO3\CMS\Backend\View\BackendLayoutView:
alias: Evomedien\Vitec\View\VitecBackendLayoutView
public: true
@@ -0,0 +1,11 @@
name: evomedien/vitecset
label: VITEC Set
settings:
website:
background:
color: '#386492'
dependencies:
- typo3/fluid-styled-content
- friendsoftypo3/headless
- itplusx/headless-container
- nb-headless-content-blocks/headless-content-blocks
Whitespace-only changes.
@@ -0,0 +1,2 @@
# Use the custom VITEC CKEditor preset for all RTE fields
RTE.default.preset = vitec
@@ -0,0 +1,44 @@
categories:
VITEC:
label: 'VITEC Settings'
description: 'Settings for VITEC Stuff'
seo:
label: 'SEO Settings'
description: 'SEO related settings'
menu:
label: 'Menu / Navigation'
description: 'Footer & meta menu page selection'
settings:
my.vitec.setting:
label: 'My example setting'
category: VITEC
type: string
default: ''
my.seoRelevantSetting:
label: 'My SEO relevant setting'
category: seo
type: int
default: 5
vitec.debugMode:
label: 'Enable Debug Mode'
description: 'Enable debug mode for VITEC extensions'
category: VITEC
type: bool
default: false
menu.footer.pageUids:
label: 'Footer menu — page UIDs'
description: 'Comma-separated list of page UIDs to display in the footer menu (in order).'
category: menu
type: string
default: ''
menu.meta.pageUids:
label: 'Meta menu — page UIDs'
description: 'Comma-separated list of page UIDs to display in the meta menu (e.g. Imprint, Privacy).'
category: menu
type: string
default: ''
@@ -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,6 @@
name: evomedien/vitecappset
label: VITEC App Set
settings:
website:
background:
color: '#386492'
@@ -0,0 +1,16 @@
categories:
myCategory:
label: 'My Category'
settings:
my.example.setting:
label: 'My example setting'
category: myCategory
type: string
default: ''
my.seoRelevantSetting:
label: 'My SEO relevant setting'
category: seo
type: int
default: 5
+41
View File
@@ -0,0 +1,41 @@
<?php
declare(strict_types=1);
defined('TYPO3') or die();
(static function (): void {
$l = 'LLL:EXT:vitec/Resources/Private/Language/locallang_pages.xlf:';
// Replace the default "Frontend Layout" dropdown on the page record
// (Page Properties → Appearance → Frontend Layout) with the VITEC layouts.
// Values are integer strings (DB column is INT).
$GLOBALS['TCA']['pages']['columns']['layout']['config']['items'] = [
['label' => $l . 'layout.0', 'value' => '0'],
['label' => $l . 'layout.1', 'value' => '1'],
['label' => $l . 'layout.2', 'value' => '2'],
['label' => $l . 'layout.3', 'value' => '3'],
['label' => $l . 'layout.4', 'value' => '4'],
['label' => $l . 'layout.5', 'value' => '5'],
['label' => $l . 'layout.6', 'value' => '6'],
['label' => $l . 'layout.7', 'value' => '7'],
['label' => $l . 'layout.8', 'value' => '8'],
['label' => $l . 'layout.9', 'value' => '9'],
['label' => $l . 'layout.10', 'value' => '10'],
['label' => $l . 'layout.11', 'value' => '11'],
['label' => $l . 'layout.12', 'value' => '12'],
['label' => $l . 'layout.13', 'value' => '13'],
['label' => $l . 'layout.14', 'value' => '14'],
['label' => $l . 'layout.15', 'value' => '15'],
['label' => $l . 'layout.16', 'value' => '16'],
['label' => $l . 'layout.17', 'value' => '17'],
['label' => $l . 'layout.18', 'value' => '18'],
['label' => $l . 'layout.19', 'value' => '19'],
['label' => $l . 'layout.20', 'value' => '20'],
];
$GLOBALS['TCA']['pages']['columns']['layout']['config']['default'] = '0';
// Hide the backend_layout / backend_layout_next_level fields from the editor —
// they are auto-synced from the frontend layout via SyncBackendLayoutHook.
$GLOBALS['TCA']['pages']['columns']['backend_layout']['displayCond'] = 'HIDE_FOR_NON_ADMINS';
$GLOBALS['TCA']['pages']['columns']['backend_layout_next_level']['displayCond'] = 'HIDE_FOR_NON_ADMINS';
})();
@@ -0,0 +1,46 @@
<?php
// filepath: /usr/home/vitecxxx/public_html/live/extensions/vitec/Configuration/TCA/Overrides/sys_category.php
defined('TYPO3') || die();
// Add custom fields to sys_category
$customSysCategoryColumns = [
'class' => [
'exclude' => true,
'label' => 'CSS Class',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
],
],
'filetype' => [
'exclude' => true,
'label' => 'Filetype (2nd part of filename)',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
],
],
'type' => [
'exclude' => true,
'label' => 'Type - actual Type, can be different to filename',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
],
],
];
// Add the fields to the TCA
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('sys_category', $customSysCategoryColumns);
// Add the fields to the "General" tab of sys_category
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes(
'sys_category',
'class, filetype, type',
'',
'after:description'
);
@@ -0,0 +1,4 @@
<?php
defined('TYPO3') || die();
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile('vitec', 'Configuration/TypoScript', 'VITEC');
@@ -0,0 +1,120 @@
<?php
defined('TYPO3') or die();
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
use TYPO3\CMS\Extbase\Utility\ExtensionUtility;
// Register the Simple Card plugin
$simplecardPluginSignature = \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
'Vitec',
'Simplecard',
'Simple Card'
);
// Register the "Single Success Story" plugin
$usecaseShowPluginSignature = \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
'Vitec',
'Usecaseshow',
'Single Success Story'
);
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist'][$usecaseShowPluginSignature] = 'pi_flexform';
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue(
$usecaseShowPluginSignature,
'FILE:EXT:vitec/Configuration/FlexForms/Usecase.xml'
);
// Register the "Show Single Market" plugin
$marketShowPluginSignature = \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
'Vitec',
'Marketshow',
'Show Single Market'
);
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist'][$marketShowPluginSignature] = 'pi_flexform';
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue(
$marketShowPluginSignature,
'FILE:EXT:vitec/Configuration/FlexForms/Market.xml'
);
// Register the "Show Single Solution" plugin
$solutionShowPluginSignature = \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
'Vitec',
'Solutionshow',
'Show Single Solution'
);
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist'][$solutionShowPluginSignature] = 'pi_flexform';
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue(
$solutionShowPluginSignature,
'FILE:EXT:vitec/Configuration/FlexForms/Solution.xml'
);
// Register the "Show Products by Category" plugin
$productListPluginSignature = \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
'Vitec',
'Productlist',
'Show Products by Category'
);
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist'][$productListPluginSignature] = 'pi_flexform';
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue(
$productListPluginSignature,
'FILE:EXT:vitec/Configuration/FlexForms/Productlist.xml'
);
// Register the "Show Single Product" plugin
$productShowPluginSignature = \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
'Vitec',
'Productshow',
'Show Single Product'
);
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist'][$productShowPluginSignature] = 'pi_flexform';
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue(
$productShowPluginSignature,
'FILE:EXT:vitec/Configuration/FlexForms/Productshow.xml'
);
// Register the "Shows List of all Success Stories" plugin
$usecaseListPluginSignature = \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
'Vitec',
'Usecaselist',
'Shows List of all Success Stories'
);
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist'][$usecaseListPluginSignature] = 'pi_flexform';
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue(
$usecaseListPluginSignature,
'FILE:EXT:vitec/Configuration/FlexForms/Usecaselist.xml'
);
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist'][$simplecardPluginSignature] = 'pi_flexform';
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue(
$simplecardPluginSignature,
'FILE:EXT:vitec/Configuration/FlexForms/Simplecard.xml'
);
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_excludelist']['vitec_datasheets'] = 'recursive,select_key,pages';
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist']['vitec_datasheets'] = 'pi_flexform';
ExtensionManagementUtility::addPiFlexFormValue(
'vitec_datasheets',
'FILE:EXT:vitec/Configuration/FlexForms/Datasheets.xml'
);
// Change frame_class to allow multiple selections
$GLOBALS['TCA']['tt_content']['columns']['frame_class']['config']['renderType'] = 'selectCheckBox';
$GLOBALS['TCA']['tt_content']['columns']['frame_class']['config']['maxitems'] = 999;
// Add custom frame_class options for Vitec
$GLOBALS['TCA']['tt_content']['columns']['frame_class']['config']['items'] = array_merge(
$GLOBALS['TCA']['tt_content']['columns']['frame_class']['config']['items'],
[
['label' => 'Vitec: Full Width', 'value' => 'vitec-full-width'],
['label' => 'Vitec: Centered Container', 'value' => 'vitec-centered'],
['label' => 'Vitec: Card Style', 'value' => 'vitec-card'],
['label' => 'Vitec: Dark Background', 'value' => 'vitec-dark'],
['label' => 'Vitec: Highlight Box', 'value' => 'vitec-highlight'],
]
);
@@ -0,0 +1,60 @@
<?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_cols_25_25_25_25',
$l . 'cols_25_25_25_25.title',
$l . 'cols_25_25_25_25.description',
[
[
['name' => $l . 'column.1', 'colPos' => 231],
['name' => $l . 'column.2', 'colPos' => 232],
['name' => $l . 'column.3', 'colPos' => 233],
['name' => $l . 'column.4', 'colPos' => 234],
],
]
))
->setIcon('EXT:vitec/Resources/Public/Icons/vitec-cols-25-25-25-25.svg')
->setGroup('vitec')
->setSaveAndCloseInNewContentElementWizard(true)
);
$GLOBALS['TCA']['tt_content']['types']['vitec_cols_25_25_25_25']['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,
--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';
ExtensionManagementUtility::addPageTSConfig(<<<TSCONFIG
mod.wizards.newContentElement.wizardItems.vitec.elements.vitec_cols_25_25_25_25 {
iconIdentifier = vitec-cols-25-25-25-25
title = LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:cols_25_25_25_25.title
description = LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:cols_25_25_25_25.description
tt_content_defValues {
CType = vitec_cols_25_25_25_25
}
}
TSCONFIG);
})();
@@ -0,0 +1,59 @@
<?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_cols_33_33_33',
$l . 'cols_33_33_33.title',
$l . 'cols_33_33_33.description',
[
[
['name' => $l . 'column.1', 'colPos' => 221],
['name' => $l . 'column.2', 'colPos' => 222],
['name' => $l . 'column.3', 'colPos' => 223],
],
]
))
->setIcon('EXT:vitec/Resources/Public/Icons/vitec-cols-33-33-33.svg')
->setGroup('vitec')
->setSaveAndCloseInNewContentElementWizard(true)
);
$GLOBALS['TCA']['tt_content']['types']['vitec_cols_33_33_33']['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,
--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';
ExtensionManagementUtility::addPageTSConfig(<<<TSCONFIG
mod.wizards.newContentElement.wizardItems.vitec.elements.vitec_cols_33_33_33 {
iconIdentifier = vitec-cols-33-33-33
title = LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:cols_33_33_33.title
description = LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:cols_33_33_33.description
tt_content_defValues {
CType = vitec_cols_33_33_33
}
}
TSCONFIG);
})();
@@ -0,0 +1,58 @@
<?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_cols_33_66',
$l . 'cols_33_66.title',
$l . 'cols_33_66.description',
[
[
['name' => $l . 'column.sidebar_33', 'colPos' => 251],
['name' => $l . 'column.main_66', 'colPos' => 252],
],
]
))
->setIcon('EXT:vitec/Resources/Public/Icons/vitec-cols-33-66.svg')
->setGroup('vitec')
->setSaveAndCloseInNewContentElementWizard(true)
);
$GLOBALS['TCA']['tt_content']['types']['vitec_cols_33_66']['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,
--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';
ExtensionManagementUtility::addPageTSConfig(<<<TSCONFIG
mod.wizards.newContentElement.wizardItems.vitec.elements.vitec_cols_33_66 {
iconIdentifier = vitec-cols-33-66
title = LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:cols_33_66.title
description = LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:cols_33_66.description
tt_content_defValues {
CType = vitec_cols_33_66
}
}
TSCONFIG);
})();
@@ -0,0 +1,58 @@
<?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_cols_50_50',
$l . 'cols_50_50.title',
$l . 'cols_50_50.description',
[
[
['name' => $l . 'column.1', 'colPos' => 211],
['name' => $l . 'column.2', 'colPos' => 212],
],
]
))
->setIcon('EXT:vitec/Resources/Public/Icons/vitec-cols-50-50.svg')
->setGroup('vitec')
->setSaveAndCloseInNewContentElementWizard(true)
);
$GLOBALS['TCA']['tt_content']['types']['vitec_cols_50_50']['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,
--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';
ExtensionManagementUtility::addPageTSConfig(<<<TSCONFIG
mod.wizards.newContentElement.wizardItems.vitec.elements.vitec_cols_50_50 {
iconIdentifier = vitec-cols-50-50
title = LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:cols_50_50.title
description = LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:cols_50_50.description
tt_content_defValues {
CType = vitec_cols_50_50
}
}
TSCONFIG);
})();
@@ -0,0 +1,58 @@
<?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_cols_66_33',
$l . 'cols_66_33.title',
$l . 'cols_66_33.description',
[
[
['name' => $l . 'column.main_66', 'colPos' => 241],
['name' => $l . 'column.sidebar_33', 'colPos' => 242],
],
]
))
->setIcon('EXT:vitec/Resources/Public/Icons/vitec-cols-66-33.svg')
->setGroup('vitec')
->setSaveAndCloseInNewContentElementWizard(true)
);
$GLOBALS['TCA']['tt_content']['types']['vitec_cols_66_33']['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,
--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';
ExtensionManagementUtility::addPageTSConfig(<<<TSCONFIG
mod.wizards.newContentElement.wizardItems.vitec.elements.vitec_cols_66_33 {
iconIdentifier = vitec-cols-66-33
title = LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:cols_66_33.title
description = LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:cols_66_33.description
tt_content_defValues {
CType = vitec_cols_66_33
}
}
TSCONFIG);
})();
@@ -0,0 +1,37 @@
<?php
declare(strict_types=1);
defined('TYPO3') or die();
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
(static function (): void {
$l = 'LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:';
// Shared field: Background Variant for all VITEC containers
ExtensionManagementUtility::addTCAcolumns('tt_content', [
'tx_vitec_bg_variant' => [
'label' => $l . 'bg_variant.label',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'items' => [
['label' => $l . 'bg_variant.option.none', 'value' => 'none'],
['label' => $l . 'bg_variant.option.orange', 'value' => 'orange'],
['label' => $l . 'bg_variant.option.blue', 'value' => 'blue'],
['label' => $l . 'bg_variant.option.graphite', 'value' => 'graphite'],
['label' => $l . 'bg_variant.option.midnight', 'value' => 'midnight'],
],
'default' => 'none',
],
],
]);
// Register VITEC wizard group header
ExtensionManagementUtility::addPageTSConfig(<<<TSCONFIG
mod.wizards.newContentElement.wizardItems.vitec {
header = LLL:EXT:vitec/Resources/Private/Language/locallang_containers.xlf:group.header
show = *
}
TSCONFIG);
})();
@@ -0,0 +1,380 @@
<?php
return [
'ctrl' => [
'title' => 'VITEC Download',
'label' => 'title',
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
'versioningWS' => true,
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'transOrigDiffSourceField' => 'l10n_diffsource',
'delete' => 'deleted',
'enablecolumns' => [
'disabled' => 'hidden',
'starttime' => 'starttime',
'endtime' => 'endtime',
],
'searchFields' => 'title,slug,teaser,description,sort1,sort2,sort3,icon,filepath,fileprefix',
'iconfile' => 'EXT:vitec/Resources/Public/Icons/tx_vitec_domain_model_download.gif'
],
'types' => [
'1' => ['showitem' => 'hidden, title, slug, keywords, teaser, description,
--div--;File, useolddl, file, fileprefix, categories,
--div--;Visibility, hideonapp, hideonwebsite, hideondatasheets, hideonproducts,
--div--;Currently not in use,icon, filepath, private_download, onlyondatasheets, sort1, sort2, sort3,
--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime'],
],
'columns' => [
'sys_language_uid' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'special' => 'languages',
'items' => [
[
'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.allLanguages',
-1,
'flags-multiple'
]
],
'default' => 0,
],
],
'l10n_parent' => [
'displayCond' => 'FIELD:sys_language_uid:>:0',
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'default' => 0,
'items' => [
['', 0],
],
'foreign_table' => 'tx_vitec_domain_model_download',
'foreign_table_where' => 'AND {#tx_vitec_domain_model_download}.{#pid}=###CURRENT_PID### AND {#tx_vitec_domain_model_download}.{#sys_language_uid} IN (-1,0)',
],
],
'l10n_diffsource' => [
'config' => [
'type' => 'passthrough',
],
],
'hidden' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.visible',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
'invertStateDisplay' => true
]
],
],
],
'starttime' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'eval' => 'datetime,int',
'default' => 0,
'behaviour' => [
'allowLanguageSynchronization' => true
]
],
],
'endtime' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'eval' => 'datetime,int',
'default' => 0,
'range' => [
'upper' => mktime(0, 0, 0, 1, 1, 2038)
],
'behaviour' => [
'allowLanguageSynchronization' => true
]
],
],
'categories' => [
'config' => [
'type' => 'category'
]
],
'title' => [
'exclude' => true,
'label' => 'Title',
'description' => 'Title of the Download - this will be shown in search results',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => ''
],
],
'teaser' => [
'exclude' => true,
'label' => 'Teaser Text for Download Cards',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => ''
],
],
'slug' => [
'exclude' => true,
'label' => 'Slug',
'config' => [
'type' => 'slug',
'generatorOptions' => [
'fields' => ['title'],
'fieldSeparator' => '/',
'prefixParentPageSlug' => true,
'replacements' => [
'/' => '',
],
],
'fallbackCharacter' => '-',
'eval' => 'unique',
],
],
'keywords' => [
'exclude' => true,
'label' => 'Keywords for internal search engine',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => ''
],
],
'description' => [
'exclude' => true,
'label' => 'Description',
'config' => [
'type' => 'text',
'enableRichtext' => true,
'richtextConfiguration' => 'default',
'fieldControl' => [
'fullScreenRichtext' => [
'disabled' => false,
],
],
'cols' => 40,
'rows' => 15,
'eval' => 'trim',
],
],
'file' => [
'exclude' => true,
'label' => 'Manual File Upload - if "Use manual file upload" is checked',
'config' => [
'type' => 'file',
'appearance' => [
'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:media.addFileReference'
],
'foreign_types' => [
'0' => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_TEXT => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_AUDIO => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_VIDEO => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_APPLICATION => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
]
],
'foreign_match_fields' => [
'fieldname' => 'file',
'tablenames' => 'tx_vitec_domain_model_download',
],
'maxitems' => 1
],
],
'sort1' => [
'exclude' => true,
'label' => 'LLL:EXT:vitec/Resources/Private/Language/locallang_db.xlf:tx_vitec_domain_model_download.sort1',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => ''
],
],
'sort2' => [
'exclude' => true,
'label' => 'LLL:EXT:vitec/Resources/Private/Language/locallang_db.xlf:tx_vitec_domain_model_download.sort2',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => ''
],
],
'sort3' => [
'exclude' => true,
'label' => 'LLL:EXT:vitec/Resources/Private/Language/locallang_db.xlf:tx_vitec_domain_model_download.sort3',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => ''
],
],
'private_download' => [
'exclude' => true,
'label' => 'LLL:EXT:vitec/Resources/Private/Language/locallang_db.xlf:tx_vitec_domain_model_download.private_download',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
]
],
'default' => 0,
]
],
'hideonapp' => [
'exclude' => true,
'label' => 'Do not show this Download in the App',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
]
],
'default' => 0,
]
],
'hideonwebsite' => [
'exclude' => true,
'label' => 'Do not show this Download on the Website',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
]
],
'default' => 0,
]
],
'hideondatasheets' => [
'exclude' => true,
'label' => 'Do not show this Download on the Datasheets-Page',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
]
],
'default' => 0,
]
],
'hideonproducts' => [
'exclude' => true,
'label' => 'Do not show this Download on a Products-Page',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
]
],
'default' => 0,
]
],
'icon' => [
'exclude' => true,
'label' => 'LLL:EXT:vitec/Resources/Private/Language/locallang_db.xlf:tx_vitec_domain_model_download.icon',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => ''
],
],
'filepath' => [
'exclude' => true,
'label' => 'LLL:EXT:vitec/Resources/Private/Language/locallang_db.xlf:tx_vitec_domain_model_download.filepath',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => ''
],
],
'fileprefix' => [
'exclude' => true,
'label' => 'Fileprefix (1st part of filename)',
'description' => 'This is the first part of the filename.',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => ''
],
],
'useolddl' => [
'exclude' => true,
'label' => 'Use manual file upload',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
]
],
'default' => 0,
]
],
],
];
@@ -0,0 +1,204 @@
<?php
return [
'ctrl' => [
'title' => 'VITEC Market',
'label' => 'title',
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
'versioningWS' => true,
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'transOrigDiffSourceField' => 'l10n_diffsource',
'delete' => 'deleted',
'enablecolumns' => [
'disabled' => 'hidden',
'starttime' => 'starttime',
'endtime' => 'endtime',
],
'searchFields' => 'title,subtitle,teaser',
'iconfile' => 'EXT:vitec/Resources/Public/Icons/tx_vitec_domain_model_market.gif',
'security' => [
'ignorePageTypeRestriction' => true,
],
],
'types' => [
'1' => [
'showitem' => 'title, 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',
],
],
'columns' => [
'sys_language_uid' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language',
'config' => [
'type' => 'language',
],
],
'l10n_parent' => [
'displayCond' => 'FIELD:sys_language_uid:>:0',
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'default' => 0,
'items' => [
['', 0],
],
'foreign_table' => 'tx_vitec_domain_model_market',
'foreign_table_where' => 'AND {#tx_vitec_domain_model_market}.{#pid}=###CURRENT_PID### AND {#tx_vitec_domain_model_market}.{#sys_language_uid} IN (-1,0)',
],
],
'l10n_diffsource' => [
'config' => [
'type' => 'passthrough',
],
],
'hidden' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.visible',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
'invertStateDisplay' => true,
],
],
],
],
'starttime' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'eval' => 'datetime,int',
'default' => 0,
'behaviour' => [
'allowLanguageSynchronization' => true,
],
],
],
'endtime' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'eval' => 'datetime,int',
'default' => 0,
'range' => [
'upper' => mktime(0, 0, 0, 1, 1, 2038),
],
'behaviour' => [
'allowLanguageSynchronization' => true,
],
],
],
'title' => [
'exclude' => false,
'label' => 'Title',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'required' => true,
'default' => '',
],
],
'subtitle' => [
'exclude' => true,
'label' => 'Subtitle',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => '',
],
],
'teaser' => [
'exclude' => true,
'label' => 'Short Teaser (optional)',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => '',
],
],
'description' => [
'exclude' => true,
'label' => 'Description',
'config' => [
'type' => 'text',
'enableRichtext' => true,
'eval' => 'trim',
'default' => '',
],
'defaultExtras' => 'richtext:rte_transform[mode=ts_css]',
],
'categories' => [
'config' => [
'type' => 'category',
],
],
'image' => [
'exclude' => true,
'label' => 'Image',
'config' => [
'type' => 'inline',
'foreign_table' => 'sys_file_reference',
'foreign_field' => 'uid_foreign',
'foreign_sortby' => 'sorting_foreign',
'foreign_table_field' => 'tablenames',
'foreign_match_fields' => [
'fieldname' => 'image',
],
'foreign_label' => 'uid_local',
'foreign_selector' => 'uid_local',
'overrideChildTca' => [
'columns' => [
'uid_local' => [
'config' => [
'appearance' => [
'elementBrowserType' => 'file',
'elementBrowserAllowed' => 'jpg,jpeg,png,gif,webp,svg',
],
],
],
],
'types' => [
'0' => [
'showitem' => '
--palette--;;imageoverlayPalette,
--palette--;;filePalette',
],
],
],
'maxitems' => 1,
'appearance' => [
'headerThumbnail' => [
'field' => 'uid_local',
'width' => '45',
'height' => '45',
],
'enabledControls' => [
'info' => true,
'new' => false,
'dragdrop' => true,
'sort' => false,
'hide' => true,
'delete' => true,
],
'fileUploadAllowed' => true,
],
],
],
],
];
@@ -0,0 +1,541 @@
<?php
return [
'ctrl' => [
'title' => 'VITEC Product',
'label' => 'title',
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
'versioningWS' => true,
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'transOrigDiffSourceField' => 'l10n_diffsource',
'delete' => 'deleted',
'enablecolumns' => [
'disabled' => 'hidden',
'starttime' => 'starttime',
'endtime' => 'endtime',
],
'searchFields' => 'title,slug',
'iconfile' => 'EXT:vitec/Resources/Public/Icons/tx_vitec_domain_model_product.gif',
'security' => [
'ignorePageTypeRestriction' => true,
],
],
'types' => [
'1' => ['showitem' => 'title, subtitle, slug, teaser, description, applications, highlights, contentelement, contentelementcta, downloads,
--div--;SEO, seotitle, urltitle, seometa, keywords, structureddata,
--div--;Images and Videos, productimage, ogimage, video,
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories, categories,
--div--;Visibility, hideonapp, hideonwebsite, hideondatasheets, hideonproducts, shortcut, shortcutpid,
--div--;Misc, legacy, supportproduct, subproduct, relatedprodukt,
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access, hidden, starttime, endtime'],
],
'columns' => [
'sys_language_uid' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language',
'config' => [
'type' => 'language',
],
],
'l10n_parent' => [
'displayCond' => 'FIELD:sys_language_uid:>:0',
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'default' => 0,
'items' => [
['', 0],
],
'foreign_table' => 'tx_vitec_domain_model_product',
'foreign_table_where' => 'AND {#tx_vitec_domain_model_product}.{#pid}=###CURRENT_PID### AND {#tx_vitec_domain_model_product}.{#sys_language_uid} IN (-1,0)',
],
],
'l10n_diffsource' => [
'config' => [
'type' => 'passthrough',
],
],
'hidden' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.visible',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
'invertStateDisplay' => true
]
],
],
],
'starttime' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'eval' => 'datetime,int',
'default' => 0,
'behaviour' => [
'allowLanguageSynchronization' => true
]
],
],
'endtime' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'eval' => 'datetime,int',
'default' => 0,
'range' => [
'upper' => mktime(0, 0, 0, 1, 1, 2038)
],
'behaviour' => [
'allowLanguageSynchronization' => true
]
],
],
'categories' => [
'config' => [
'type' => 'category'
]
],
'title' => [
'exclude' => false,
'label' => 'LLL:EXT:vitec/Resources/Private/Language/locallang_db.xlf:tx_vitec_domain_model_product.title',
'description' => 'LLL:EXT:vitec/Resources/Private/Language/locallang_db.xlf:tx_vitec_domain_model_product.title.description',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'required' => true,
'default' => ''
],
],
'slug' => [
'exclude' => false,
'label' => 'LLL:EXT:vitec/Resources/Private/Language/locallang_db.xlf:tx_vitec_domain_model_product.slug',
'description' => 'LLL:EXT:vitec/Resources/Private/Language/locallang_db.xlf:tx_vitec_domain_model_product.slug.description',
'config' => [
'type' => 'slug',
'size' => 50,
'generatorOptions' => [
'fields' => ['title'], // TODO: adjust this field to the one you want to use
'fieldSeparator' => '-',
'replacements' => [
'/' => '',
],
],
'fallbackCharacter' => '-',
'eval' => 'uniqueInPid',
],
],
'seotitle' => [
'exclude' => false,
'label' => 'SEO-Title',
'description' => 'SEO specific title, used for sharing options',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => ''
],
],
'urltitle' => [
'exclude' => false,
'label' => 'URL-Title',
'description' => 'LLL:EXT:vitec/Resources/Private/Language/locallang_db.xlf:tx_vitec_domain_model_product.urltitle.description',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => ''
],
],
'video' => [
'exclude' => false,
'label' => 'Product Video - just the Youtube Clip ID',
'description' => 'Product Video - just the Youtube Clip ID',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => ''
],
],
'downloads' => [
'exclude' => true,
'label' => 'Downloads',
'config' => [
'type' => 'select',
'renderType' => 'selectMultipleSideBySide',
'foreign_table' => 'tx_vitec_domain_model_download',
'MM' => 'tx_vitec_product_download_mm', // Define the MM table for the relation
'size' => 10,
'maxitems' => 9999,
'minitems' => 0,
'enableMultiSelectFilterTextfield' => true, // Optional: Adds a search box for filtering
],
],
'structureddata' => [
'exclude' => true,
'label' => 'Structured Data in JSON Format',
'config' => [
'type' => 'text',
'cols' => 40,
'rows' => 15,
'eval' => 'trim'
]
],
'keywords' => [
'exclude' => true,
'label' => 'Keywords',
'description' => 'Keywords for SEO, separated by commas',
'config' => [
'type' => 'text',
'cols' => 40,
'rows' => 15,
'eval' => 'trim'
]
],
'seometa' => [
'exclude' => true,
'label' => 'SEO Meta Description',
'description' => 'SEO specific meta description, used for sharing options',
'config' => [
'type' => 'text',
'cols' => 40,
'rows' => 15,
'eval' => 'trim'
]
],
'teaser' => [
'exclude' => true,
'label' => 'Short Teaser (optional)',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => ''
],
],
'subtitle' => [
'exclude' => true,
'label' => 'Subtitle',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => ''
],
],
'hideonapp' => [
'exclude' => true,
'label' => 'If checked - Product will not be shown on App',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
'invertStateDisplay' => false
]
],
],
],
'hideonwebsite' => [
'exclude' => true,
'label' => 'If checked - Product will not be shown on Website',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
'invertStateDisplay' => false
]
],
],
],
'hideonproducts' => [
'exclude' => true,
'label' => 'If checked - Product will not be shown on Product Section',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
'invertStateDisplay' => false
]
],
],
],
'hideondatasheets' => [
'exclude' => true,
'label' => 'If checked - Product will not be shown on Datasheets Page',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
'invertStateDisplay' => false
]
],
],
],
'applications' => [
'exclude' => true,
'label' => 'Applications',
'config' => [
'type' => 'text',
'enableRichtext' => 'true',
'eval' => 'trim',
'default' => ''
],
'defaultExtras' => 'richtext:rte_transform[mode=ts_css]'
],
'description' => [
'exclude' => true,
'label' => 'Description',
'config' => [
'type' => 'text',
'enableRichtext' => 'true',
'eval' => 'trim',
'default' => ''
],
'defaultExtras' => 'richtext:rte_transform[mode=ts_css]'
],
'highlights' => [
'exclude' => true,
'label' => 'Highlights',
'config' => [
'type' => 'text',
'enableRichtext' => 'true',
'eval' => 'trim',
'default' => ''
],
'defaultExtras' => 'richtext:rte_transform[mode=ts_css]'
],
'shortcut' => [
'exclude' => true,
'label' => 'Does this Product have a custom Page',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
'invertStateDisplay' => false
]
],
],
],
'shortcutpid' => [
'exclude' => false,
'label' => 'Page ID',
'description' => 'PID of the custom page',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => ''
],
],
'legacy' => [
'exclude' => true,
'label' => 'Is this a legacy produc?',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
'invertStateDisplay' => false
]
],
],
],
'supportproduct' => [
'exclude' => true,
'label' => 'Is this a support product?',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
'invertStateDisplay' => false
]
],
],
],
'subproduct' => [
'exclude' => true,
'label' => 'Product is a sub-products',
'description' => 'This Product will not be shown as a main product',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
'invertStateDisplay' => false
]
],
],
],
'relatedprodukt' => [
'exclude' => true,
'label' => 'Related Products',
'description' => 'Select related products for this product',
'config' => [
'type' => 'select',
'renderType' => 'selectMultipleSideBySide',
'foreign_table' => 'tx_vitec_domain_model_product', // Reference the same table
'MM' => 'tx_vitec_product_related_mm', // Define the MM table for the relation
'size' => 10,
'maxitems' => 9999,
'minitems' => 0,
'enableMultiSelectFilterTextfield' => true, // Optional: Adds a search box for filtering
],
],
'productimage' => [
'exclude' => true,
'label' => 'Product Image(s)',
'config' => [
'type' => 'inline',
'foreign_table' => 'sys_file_reference',
'foreign_field' => 'uid_foreign',
'foreign_sortby' => 'sorting_foreign',
'foreign_table_field' => 'tablenames',
'foreign_match_fields' => [
'fieldname' => 'productimage',
],
'appearance' => [
'collapseAll' => true,
'levelLinksPosition' => 'top',
'showSynchronizationLink' => true,
'showPossibleLocalizationRecords' => true,
'showAllLocalizationLink' => true,
],
'behaviour' => [
'allowLanguageSynchronization' => true,
],
'filter' => [
[
'userFunc' => \TYPO3\CMS\Core\Resource\Filter\FileExtensionFilter::class . '->filterInlineChildren',
'parameters' => [
'allowedFileExtensions' => 'jpg,jpeg,png,gif',
],
],
],
'maxitems' => 10,
'minitems' => 0,
],
],
'ogimage' => [
'exclude' => true,
'label' => 'Open Graph Image',
'config' => [
'type' => 'inline',
'foreign_table' => 'sys_file_reference',
'foreign_field' => 'uid_foreign',
'foreign_sortby' => 'sorting_foreign',
'foreign_table_field' => 'tablenames',
'foreign_match_fields' => [
'fieldname' => 'ogimage',
],
'appearance' => [
'collapseAll' => true,
'levelLinksPosition' => 'top',
'showSynchronizationLink' => true,
'showPossibleLocalizationRecords' => true,
'showAllLocalizationLink' => true,
],
'behaviour' => [
'allowLanguageSynchronization' => true,
],
'filter' => [
[
'userFunc' => \TYPO3\CMS\Core\Resource\Filter\FileExtensionFilter::class . '->filterInlineChildren',
'parameters' => [
'allowedFileExtensions' => 'jpg,jpeg,png,gif,webp',
],
],
],
'maxitems' => 1, // Allow only one image
'minitems' => 0,
],
],
'contentelement' => [
'exclude' => true,
'label' => 'Select Content Element for Key Features Section',
'config' => [
'type' => 'input',
'renderType' => 'inputLink',
'softref' => 'typolink',
'eval' => 'trim',
'fieldControl' => [
'linkPopup' => [
'options' => [
'title' => 'Select Content Element',
'blindLinkOptions' => 'mail,folder,url', // Disable unnecessary link types
'blindLinkFields' => 'class,params', // Disable unnecessary fields
],
],
],
],
],
'contentelementcta' => [
'exclude' => true,
'label' => 'Select Content Element for CTA Section',
'config' => [
'type' => 'input',
'renderType' => 'inputLink',
'softref' => 'typolink',
'eval' => 'trim',
'fieldControl' => [
'linkPopup' => [
'options' => [
'title' => 'Select Content Element',
'blindLinkOptions' => 'mail,folder,url', // Disable unnecessary link types
'blindLinkFields' => 'class,params', // Disable unnecessary fields
],
],
],
],
],
/* ----------------------------------------------------- */
],
];
@@ -0,0 +1,204 @@
<?php
return [
'ctrl' => [
'title' => 'VITEC Solution',
'label' => 'title',
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
'versioningWS' => true,
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'transOrigDiffSourceField' => 'l10n_diffsource',
'delete' => 'deleted',
'enablecolumns' => [
'disabled' => 'hidden',
'starttime' => 'starttime',
'endtime' => 'endtime',
],
'searchFields' => 'title,subtitle,teaser',
'iconfile' => 'EXT:vitec/Resources/Public/Icons/tx_vitec_domain_model_solution.gif',
'security' => [
'ignorePageTypeRestriction' => true,
],
],
'types' => [
'1' => [
'showitem' => 'title, 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',
],
],
'columns' => [
'sys_language_uid' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language',
'config' => [
'type' => 'language',
],
],
'l10n_parent' => [
'displayCond' => 'FIELD:sys_language_uid:>:0',
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'default' => 0,
'items' => [
['', 0],
],
'foreign_table' => 'tx_vitec_domain_model_solution',
'foreign_table_where' => 'AND {#tx_vitec_domain_model_solution}.{#pid}=###CURRENT_PID### AND {#tx_vitec_domain_model_solution}.{#sys_language_uid} IN (-1,0)',
],
],
'l10n_diffsource' => [
'config' => [
'type' => 'passthrough',
],
],
'hidden' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.visible',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
'invertStateDisplay' => true,
],
],
],
],
'starttime' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'eval' => 'datetime,int',
'default' => 0,
'behaviour' => [
'allowLanguageSynchronization' => true,
],
],
],
'endtime' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'eval' => 'datetime,int',
'default' => 0,
'range' => [
'upper' => mktime(0, 0, 0, 1, 1, 2038),
],
'behaviour' => [
'allowLanguageSynchronization' => true,
],
],
],
'title' => [
'exclude' => false,
'label' => 'Title',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'required' => true,
'default' => '',
],
],
'subtitle' => [
'exclude' => true,
'label' => 'Subtitle',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => '',
],
],
'teaser' => [
'exclude' => true,
'label' => 'Short Teaser (optional)',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => '',
],
],
'description' => [
'exclude' => true,
'label' => 'Description',
'config' => [
'type' => 'text',
'enableRichtext' => true,
'eval' => 'trim',
'default' => '',
],
'defaultExtras' => 'richtext:rte_transform[mode=ts_css]',
],
'categories' => [
'config' => [
'type' => 'category',
],
],
'image' => [
'exclude' => true,
'label' => 'Image',
'config' => [
'type' => 'inline',
'foreign_table' => 'sys_file_reference',
'foreign_field' => 'uid_foreign',
'foreign_sortby' => 'sorting_foreign',
'foreign_table_field' => 'tablenames',
'foreign_match_fields' => [
'fieldname' => 'image',
],
'foreign_label' => 'uid_local',
'foreign_selector' => 'uid_local',
'overrideChildTca' => [
'columns' => [
'uid_local' => [
'config' => [
'appearance' => [
'elementBrowserType' => 'file',
'elementBrowserAllowed' => 'jpg,jpeg,png,gif,webp,svg',
],
],
],
],
'types' => [
'0' => [
'showitem' => '
--palette--;;imageoverlayPalette,
--palette--;;filePalette',
],
],
],
'maxitems' => 1,
'appearance' => [
'headerThumbnail' => [
'field' => 'uid_local',
'width' => '45',
'height' => '45',
],
'enabledControls' => [
'info' => true,
'new' => false,
'dragdrop' => true,
'sort' => false,
'hide' => true,
'delete' => true,
],
'fileUploadAllowed' => true,
],
],
],
],
];
@@ -0,0 +1,318 @@
<?php
return [
'ctrl' => [
'title' => 'VITEC Success Story',
'label' => 'title',
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
'versioningWS' => true,
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'transOrigDiffSourceField' => 'l10n_diffsource',
'delete' => 'deleted',
'enablecolumns' => [
'disabled' => 'hidden',
'starttime' => 'starttime',
'endtime' => 'endtime',
],
'searchFields' => 'title,slug',
'iconfile' => 'EXT:vitec/Resources/Public/Icons/tx_vitec_domain_model_usecase.gif',
'security' => [
'ignorePageTypeRestriction' => true,
],
],
'types' => [
'1' => ['showitem' => 'title, slug, subtitle, teaser, description, singlepid, caseimage, logoimage,
--div--;Visibility, hideonapp, hideonwebsite,
--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:categories, categories,
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access, hidden, starttime, endtime', ],
],
'columns' => [
'sys_language_uid' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language',
'config' => [
'type' => 'language',
],
],
'l10n_parent' => [
'displayCond' => 'FIELD:sys_language_uid:>:0',
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'default' => 0,
'items' => [
['', 0],
],
'foreign_table' => 'tx_vitec_domain_model_download',
'foreign_table_where' => 'AND {#tx_vitec_domain_model_download}.{#pid}=###CURRENT_PID### AND {#tx_vitec_domain_model_download}.{#sys_language_uid} IN (-1,0)',
],
],
'l10n_diffsource' => [
'config' => [
'type' => 'passthrough',
],
],
'hidden' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.visible',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
'invertStateDisplay' => true,
],
],
],
],
'starttime' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'eval' => 'datetime,int',
'default' => 0,
'behaviour' => [
'allowLanguageSynchronization' => true,
],
],
],
'endtime' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'eval' => 'datetime,int',
'default' => 0,
'range' => [
'upper' => mktime(0, 0, 0, 1, 1, 2038),
],
'behaviour' => [
'allowLanguageSynchronization' => true,
],
],
],
'title' => [
'exclude' => false,
'label' => 'LLL:EXT:vitec/Resources/Private/Language/locallang_db.xlf:tx_vitec_domain_model_download.title',
'description' => 'LLL:EXT:vitec/Resources/Private/Language/locallang_db.xlf:tx_vitec_domain_model_download.title.description',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'required' => true,
'default' => '',
],
],
'slug' => [
'exclude' => false,
'label' => 'LLL:EXT:vitec/Resources/Private/Language/locallang_db.xlf:tx_vitec_domain_model_download.slug',
'description' => 'LLL:EXT:vitec/Resources/Private/Language/locallang_db.xlf:tx_vitec_domain_model_download.slug.description',
'config' => [
'type' => 'slug',
'size' => 50,
'generatorOptions' => [
'fields' => ['title'], // TODO: adjust this field to the one you want to use
'fieldSeparator' => '-',
'replacements' => [
'/' => '',
],
],
'fallbackCharacter' => '-',
'eval' => 'uniqueInPid',
],
],
'singlepid' => [
'exclude' => false,
'label' => 'Page ID of Success Story',
'description' => 'LLL:EXT:vitec/Resources/Private/Language/locallang_db.xlf:tx_vitec_domain_model_download.title.description',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'required' => false,
'default' => '',
],
],
'teaser' => [
'exclude' => true,
'label' => 'Short Teaser (optional)',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => '',
],
],
'subtitle' => [
'exclude' => true,
'label' => 'Subtitle',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'default' => '',
],
],
'hideonapp' => [
'exclude' => true,
'label' => 'If checked - Product will not be shown on App',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
'invertStateDisplay' => false,
],
],
],
],
'hideonwebsite' => [
'exclude' => true,
'label' => 'If checked - Product will not be shown on Website',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
'invertStateDisplay' => false,
],
],
],
],
'description' => [
'exclude' => true,
'label' => 'Description',
'config' => [
'type' => 'text',
'enableRichtext' => 'true',
'eval' => 'trim',
'default' => '',
],
'defaultExtras' => 'richtext:rte_transform[mode=ts_css]',
],
'caseimage' => [
'exclude' => true,
'label' => 'Case Image',
'config' => [
'type' => 'inline',
'foreign_table' => 'sys_file_reference',
'foreign_field' => 'uid_foreign',
'foreign_sortby' => 'sorting_foreign',
'foreign_table_field' => 'tablenames',
'foreign_match_fields' => [
'fieldname' => 'caseimage',
],
'foreign_label' => 'uid_local',
'foreign_selector' => 'uid_local',
'overrideChildTca' => [
'columns' => [
'uid_local' => [
'config' => [
'appearance' => [
'elementBrowserType' => 'file',
'elementBrowserAllowed' => 'jpg,jpeg,png,gif',
],
],
],
],
'types' => [
'0' => [
'showitem' => '
--palette--;;imageoverlayPalette,
--palette--;;filePalette',
],
],
],
'maxitems' => 1,
'appearance' => [
'headerThumbnail' => [
'field' => 'uid_local',
'width' => '45',
'height' => '45',
],
'enabledControls' => [
'info' => true,
'new' => false,
'dragdrop' => true,
'sort' => false,
'hide' => true,
'delete' => true,
],
'fileUploadAllowed' => true,
],
],
],
'logoimage' => [
'exclude' => true,
'label' => 'Customer Logo',
'config' => [
'type' => 'inline',
'foreign_table' => 'sys_file_reference',
'foreign_field' => 'uid_foreign',
'foreign_sortby' => 'sorting_foreign',
'foreign_table_field' => 'tablenames',
'foreign_match_fields' => [
'fieldname' => 'logoimage',
],
'foreign_label' => 'uid_local',
'foreign_selector' => 'uid_local',
'overrideChildTca' => [
'columns' => [
'uid_local' => [
'config' => [
'appearance' => [
'elementBrowserType' => 'file',
'elementBrowserAllowed' => 'jpg,jpeg,png,gif',
],
],
],
],
'types' => [
'0' => [
'showitem' => '
--palette--;;imageoverlayPalette,
--palette--;;filePalette',
],
],
],
'maxitems' => 1,
'appearance' => [
'headerThumbnail' => [
'field' => 'uid_local',
'width' => '45',
'height' => '45',
],
'enabledControls' => [
'info' => true,
'new' => false,
'dragdrop' => true,
'sort' => false,
'hide' => true,
'delete' => true,
],
'fileUploadAllowed' => true,
],
],
],
'categories' => [
'config' => [
'type' => 'category'
]
],
],
];
@@ -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
@@ -0,0 +1,74 @@
# =============================================================================
# VITEC menus — Headless / JSON output
#
# Three menus are exposed at the page root of the JSON response:
# - mainNavigation : full hierarchy from root, all visible pages
# - footerMenu : curated, configured via site setting menu.footer.pageUids
# - metaMenu : curated, configured via site setting menu.meta.pageUids
#
# Each menu uses friendsoftypo3/headless MenuProcessor which:
# * resolves Shortcut pages to their target
# * skips pages with "Show in menu = no" (nav_hide=1) by default
# * marks active / current items
# * exposes `children` for sub-levels
# =============================================================================
# -----------------------------------------------------------------------------
# Main navigation — full hierarchy
# -----------------------------------------------------------------------------
lib.mainNavigation = JSON
lib.mainNavigation {
dataProcessing {
10 = FriendsOfTYPO3\Headless\DataProcessing\MenuProcessor
10 {
levels = 10
expandAll = 1
includeSpacer = 0
titleField = nav_title // title
as = mainNavigation
}
}
}
# -----------------------------------------------------------------------------
# Footer menu — curated by site setting (UIDs)
# -----------------------------------------------------------------------------
lib.footerMenu = JSON
lib.footerMenu {
dataProcessing {
10 = FriendsOfTYPO3\Headless\DataProcessing\MenuProcessor
10 {
special = list
special.value = {$menu.footer.pageUids}
levels = 1
includeSpacer = 0
titleField = nav_title // title
as = footerMenu
}
}
}
# -----------------------------------------------------------------------------
# Meta menu — curated by site setting (UIDs)
# -----------------------------------------------------------------------------
lib.metaMenu = JSON
lib.metaMenu {
dataProcessing {
10 = FriendsOfTYPO3\Headless\DataProcessing\MenuProcessor
10 {
special = list
special.value = {$menu.meta.pageUids}
levels = 1
includeSpacer = 0
titleField = nav_title // title
as = metaMenu
}
}
}
# -----------------------------------------------------------------------------
# Wire them into the page-level JSON output
# -----------------------------------------------------------------------------
page.10.fields.mainNavigation =< lib.mainNavigation
page.10.fields.footerMenu =< lib.footerMenu
page.10.fields.metaMenu =< lib.metaMenu
@@ -0,0 +1,3 @@
# Test if we can add any field at all
tt_content.list.fields.content.fields.testField = TEXT
tt_content.list.fields.content.fields.testField.value = TEST VALUE FROM VITEC
@@ -0,0 +1 @@
plugin.tx_vitec.settings.layout = 0
@@ -0,0 +1,74 @@
plugin.tx_vitec_usecaseshow {
view {
templateRootPaths.0 = EXT:vitec/Resources/Private/Templates/
partialRootPaths.0 = EXT:vitec/Resources/Private/Partials/
layoutRootPaths.0 = EXT:vitec/Resources/Private/Layouts/
}
persistence {
storagePid = 50
}
}
plugin.tx_vitec_marketshow {
view {
templateRootPaths.0 = EXT:vitec/Resources/Private/Templates/
partialRootPaths.0 = EXT:vitec/Resources/Private/Partials/
layoutRootPaths.0 = EXT:vitec/Resources/Private/Layouts/
}
persistence {
storagePid = 50
}
}
plugin.tx_vitec_solutionshow {
view {
templateRootPaths.0 = EXT:vitec/Resources/Private/Templates/
partialRootPaths.0 = EXT:vitec/Resources/Private/Partials/
layoutRootPaths.0 = EXT:vitec/Resources/Private/Layouts/
}
persistence {
storagePid = 50
}
}
plugin.tx_vitec_usecaselist {
view {
templateRootPaths.0 = EXT:vitec/Resources/Private/Templates/
partialRootPaths.0 = EXT:vitec/Resources/Private/Partials/
layoutRootPaths.0 = EXT:vitec/Resources/Private/Layouts/
}
persistence {
storagePid = 50
}
}
plugin.tx_vitec_Prodcutlist {
settings {
# Map FlexForm settings to the controller
layout = {$plugin.tx_vitec.settings.layout}
}
}
plugin.tx_vitec_Prodcutlist {
settings {
categories = 1,2,3
}
}
config.tx_extbase {
persistence {
classes {
TYPO3\CMS\Extbase\Domain\Model\Category {
subclass = Evomedien\Vitec\Domain\Model\Category
}
Evomedien\Vitec\Domain\Model\Category {
mapping {
tableName = sys_category
recordType = 0
}
}
}
}
}
# Include Headless configurations
@import 'EXT:vitec/Configuration/TypoScript/Headless/*.typoscript'
+118
View File
@@ -0,0 +1,118 @@
# =============================================================
# VITEC Extension — page.tsconfig
# =============================================================
mod {
wizards.newContentElement.wizardItems.vitec {
header = VITEC
show = *
elements {
# -------- Extbase Plugins --------
productlist {
iconIdentifier = vitec-plugin-productlist
title = List of VITEC Products
description = LLL:EXT:vitec/Resources/Private/Language/locallang_db.xlf:tx_vitec_productlist.description
tt_content_defValues {
CType = list
list_type = vitec_productlist
}
}
productshow {
iconIdentifier = vitec-plugin-productshow
title = Show single VITEC Product
description = Either show a single product coming from a list, OR select a specific product in flexform
tt_content_defValues {
CType = list
list_type = vitec_productshow
}
}
usecaseshow {
iconIdentifier = vitec-plugin-usecaseshow
title = Show single VITEC Success Story
description = Shows a selected Success Story in a Card with different layouts
tt_content_defValues {
CType = list
list_type = vitec_usecaseshow
}
}
marketshow {
iconIdentifier = vitec-plugin-marketshow
title = Show single VITEC Market
description = Shows a selected Market in a Card with different layouts
tt_content_defValues {
CType = list
list_type = vitec_marketshow
}
}
solutionshow {
iconIdentifier = vitec-plugin-solutionshow
title = Show single VITEC Solution
description = Shows a selected Solution in a Card with different layouts
tt_content_defValues {
CType = list
list_type = vitec_solutionshow
}
}
usecaselist {
iconIdentifier = vitec-plugin-usecaselist
title = Show all VITEC Success Stories
description = LLL:EXT:vitec/Resources/Private/Language/locallang_db.xlf:tx_vitec_usecaselist.description
tt_content_defValues {
CType = list
list_type = vitec_usecaselist
}
}
downloadcard {
iconIdentifier = vitec-plugin-downloadcard
title = Downloadcard for single Download
description = LLL:EXT:vitec/Resources/Private/Language/locallang_db.xlf:tx_vitec_usecaselist.description
tt_content_defValues {
CType = list
list_type = vitec_downloadcard
}
}
downloadcardcollection {
iconIdentifier = vitec-plugin-downloadcardcollection
title = Downloadcard Collection
description = Multiple Downloads in one Card
tt_content_defValues {
CType = list
list_type = vitec_downloadcardcollection
}
}
datasheets {
iconIdentifier = vitec-plugin-datasheets
title = VITEC Datasheets
description = Interactive datasheets with filtering and download functionality
tt_content_defValues {
CType = list
list_type = vitec_datasheets
}
}
simplecard {
iconIdentifier = vitec-plugin-simplecard
title = Simple Card
description = Simple Card (Image, Title, Text, Link)
tt_content_defValues {
CType = list
list_type = vitec_simplecard
}
}
}
}
}
############################################################
# Backend Previews für klassische Plugins (list_type)
############################################################
mod.web_layout.tt_content.preview {
simplecard = EXT:vitec/Resources/Private/Templates/Simplecard/Backendpreview.html
# vitec_usecaseshow = EXT:vitec/Resources/Private/Templates/Usecaseshow/Backendpreview.html
# ^ Pfad anpassen wenn das Template existiert, dann Kommentar entfernen
}
# Hinweis: Content-Blocks-Previews werden automatisch aus
# packages/vitec/ContentBlocks/ContentElements/<n>/templates/backend-preview.html geladen.
# Keine separate Registrierung nötig.