- new project-neutral extension evo_megamenu_json (Evomedien): a Megamenu plugin holding entries, columns, items, teaser cards and a featured slot as nested records; presentation settings travel with the payload so the front end reads behaviour instead of hard-coding it; published as page.10.fields.megaMenu, driven by the site settings megamenu.contentUid and megamenu.storagePid - vitec:seed-megamenu fills one element from the live structure: 5 entries, 26 columns, 95 items, 4 story cards; items without a page yet are flagged pending so the front end falls back to the column link - vitec:debug-sets prints the resolved site set order - read-only diagnostics: check_megamenu_schema.php, check_typoscript_templates.php - docs: schema updates run via extension:setup (database:updateschema no longer exists in v14), and a JSON Accept header activates headless-mixed, which strips every set-added page field
95 lines
3.8 KiB
PHP
95 lines
3.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* A single link line inside a column. `teaser` and `image` only reach the
|
|
* JSON from content stage 2 on, `pending` marks a target page that does not
|
|
* exist yet so the front end can grey the line out instead of linking into
|
|
* a 404.
|
|
*/
|
|
|
|
$ll = 'LLL:EXT:evo_megamenu_json/Resources/Private/Language/locallang_db.xlf:tx_evomegamenujson_item.';
|
|
|
|
return [
|
|
'ctrl' => [
|
|
'title' => 'LLL:EXT:evo_megamenu_json/Resources/Private/Language/locallang_db.xlf:tx_evomegamenujson_item',
|
|
'label' => 'title',
|
|
'label_alt' => 'teaser',
|
|
'tstamp' => 'tstamp',
|
|
'crdate' => 'crdate',
|
|
'delete' => 'deleted',
|
|
'sortby' => 'sorting',
|
|
'hideTable' => true,
|
|
'versioningWS' => true,
|
|
'languageField' => 'sys_language_uid',
|
|
'transOrigPointerField' => 'l10n_parent',
|
|
'transOrigDiffSourceField' => 'l10n_diffsource',
|
|
'enablecolumns' => ['disabled' => 'hidden'],
|
|
'iconfile' => 'EXT:evo_megamenu_json/Resources/Public/Icons/item.svg',
|
|
'searchFields' => 'title,teaser',
|
|
],
|
|
'types' => [
|
|
'1' => ['showitem' => 'hidden, title, link, pending, teaser, badge, image, --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language, sys_language_uid, l10n_parent'],
|
|
],
|
|
'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' => [['label' => '', 'value' => 0]],
|
|
'foreign_table' => 'tx_evomegamenujson_item',
|
|
'foreign_table_where' => 'AND {#tx_evomegamenujson_item}.{#pid}=###CURRENT_PID### AND {#tx_evomegamenujson_item}.{#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.hidden',
|
|
'config' => ['type' => 'check', 'renderType' => 'checkboxToggle', 'default' => 0],
|
|
],
|
|
'parentid' => ['config' => ['type' => 'passthrough']],
|
|
|
|
'title' => [
|
|
'label' => $ll . 'title',
|
|
'config' => ['type' => 'input', 'size' => 40, 'eval' => 'trim', 'required' => true],
|
|
],
|
|
'link' => [
|
|
'label' => $ll . 'link',
|
|
'config' => ['type' => 'link', 'allowedTypes' => ['page', 'url', 'record', 'file'], 'size' => 40],
|
|
],
|
|
'pending' => [
|
|
'label' => $ll . 'pending',
|
|
'description' => $ll . 'pending.description',
|
|
'config' => ['type' => 'check', 'renderType' => 'checkboxToggle', 'default' => 0],
|
|
],
|
|
'teaser' => [
|
|
'label' => $ll . 'teaser',
|
|
'description' => $ll . 'teaser.description',
|
|
'config' => ['type' => 'input', 'size' => 40, 'eval' => 'trim', 'max' => 255],
|
|
],
|
|
'badge' => [
|
|
'label' => $ll . 'badge',
|
|
'description' => $ll . 'badge.description',
|
|
'config' => ['type' => 'input', 'size' => 15, 'eval' => 'trim', 'max' => 60],
|
|
],
|
|
'image' => [
|
|
'label' => $ll . 'image',
|
|
'description' => $ll . 'image.description',
|
|
'config' => [
|
|
'type' => 'file',
|
|
'maxitems' => 1,
|
|
'allowed' => 'common-image-types',
|
|
],
|
|
],
|
|
],
|
|
];
|