Files
VITEC-website/packages/vitec/Configuration/TypoScript/Headless/vitec_menus.typoscript
khaccount 4541c58fe7 VITEC headless v14: 5-bug fix unifies plugin renderers + cleanup
Resolves a cascade of TYPO3 v14 breaking changes that left every VITEC
plugin's JSON output silently empty:

1. `list_type` column dropped — all renderer page-discovery queries now
   filter by `CType = 'vitec_X'`.
2. `#[AsAllowedCallable]` attribute added to every public render() —
   without it v14 throws AllowedCallableException, which headless
   silently filters via its "Oops, an error occurred!" guard.
3. `$GLOBALS['TSFE']->id` is null inside JSON cObj context — page id
   now read from the `frontend.page.information` request attribute
   (TSFE fallback kept for legacy entry points).
4. page.tsconfig wizard items migrated to `CType = vitec_X` directly
   (legacy `CType=list, list_type=...` no longer exists in v14).
5. ContainerChildrenProcessor + ContentElementResolver dispatch the
   PLUGIN_RENDERERS map by CType (primary) with list_type fallback.

Beyond the bug fix this commit also contains:
- Datasheets renderer rewritten to "products with newest datasheet"
  semantics (filtered via Download.hideondatasheets).
- New vitec/card content block — multi-purpose card with backend
  preview and layout/background/aspect/alignment/border/shadow options.
- New vitec_container CType (b13 single-column container, FlexForm
  cssClass propagated into the JSON envelope).
- ContentElementResolver service for contentelement/contentelementcta
  link resolution; ContainerChildrenProcessor for nested plugin
  resolution inside b13 containers.
- Vitecset setup.typoscript: ContentElement import moved to top so
  lib.contentElement is defined before VITEC's tt_content blocks.
- Cleanup: 98 .bak.<timestamp> debugging backups removed; *.bak.* and
  /public/_assets_install/ added to .gitignore.
2026-06-15 14:42:33 +02:00

75 lines
2.7 KiB
Plaintext
Executable File

# =============================================================================
# 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