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.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
o-rascheandClaude Opus 4.7 committed 2026-06-15 14:29:17 +02:00
1 parent 64ea55d29d
commit 3aaf8fdad5
98 files changed
+5650 -10154

No files matched your search

@@ -0,0 +1 @@
:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;color:#ffffffde;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#242424;font-family:system-ui,Avenir,Helvetica,Arial,sans-serif;font-weight:400;line-height:1.5}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}a{color:#646cff;-webkit-text-decoration:inherit;text-decoration:inherit;font-weight:500}a:hover{color:#535bf2}body{place-items:center;min-width:320px;min-height:100vh;margin:0;display:flex}h1{font-size:3.2em;line-height:1.1}button{cursor:pointer;background-color:#1a1a1a;border:1px solid #0000;border-radius:8px;padding:.6em 1.2em;font-family:inherit;font-size:1em;font-weight:500;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}@media (prefers-color-scheme:light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}.vitec-element{box-shadow:none;color:inherit;background-color:#0000;background-image:none;border:none;border-radius:0;margin-top:.5rem;margin-bottom:.5rem;padding:0;position:relative}@media (min-width:900px){.vitec-element--full-width{width:calc(100% + 4rem);margin-left:-2rem}}.vitec-element__stack{flex-direction:column;display:flex}.vitec-space-before--extra-small{margin-top:.5rem}.vitec-space-before--small{margin-top:1rem}.vitec-space-before--medium{margin-top:2.5rem}.vitec-space-before--large{margin-top:4rem}.vitec-space-before--extra-large{margin-top:6rem}.vitec-space-after--extra-small{margin-bottom:.5rem}.vitec-space-after--small{margin-bottom:1rem}.vitec-space-after--medium{margin-bottom:2.5rem}.vitec-space-after--large{margin-bottom:4rem}.vitec-space-after--extra-large{margin-bottom:6rem}.vitec_card__link-wrap{color:inherit;text-decoration:none;display:block}.vitec_card__link-wrap:hover .vitec_card__inner{transform:translateY(-2px);box-shadow:0 6px 18px #0f274926}.vitec_card__inner{background:#fff;border-radius:.75rem;flex-direction:column;height:100%;transition:box-shadow .2s,transform .2s;display:flex;overflow:hidden;box-shadow:0 2px 10px #0f274917}.vitec_card__inner:hover{transform:translateY(-2px);box-shadow:0 6px 18px #0f274926}.vitec_card__inner.vitec_card__inner--centered{text-align:center;align-items:center}.vitec_card__media{aspect-ratio:16/7;flex-shrink:0;width:100%;overflow:hidden}.vitec_card__image{object-fit:cover;width:100%;height:100%;display:block}.vitec_card__body{flex-direction:column;flex:1;gap:.5rem;padding:1rem;display:flex}.vitec_card__eyebrow{opacity:.65;letter-spacing:.1em;font-size:.75rem}.vitec_card__header{color:#f47936;font-size:1.1rem;font-weight:600;line-height:1.3}.vitec_card__subheader{color:#6b7280;font-size:.8125rem}.vitec_card__text{color:#374151;flex:1;font-size:.875rem;line-height:1.55}.vitec_card__text p:first-of-type{-webkit-line-clamp:4;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.vitec_card__text p+p{display:none}.vitec_card__footer{margin-top:auto;padding-top:.75rem}.vitec_card__footer .MuiButton-contained{color:#fff;letter-spacing:.08em;background-color:#f47936;border-radius:.4rem;width:100%;padding:.6rem 1rem;font-weight:700}.vitec_card__footer .MuiButton-contained:hover{background-color:#d9641f}.vitec_card__footer .MuiButton-outlined{color:#f47936;letter-spacing:.05em;border-color:#f47936;border-radius:.4rem;width:100%;padding:.55rem 1rem;font-weight:600}.vitec_card__footer .MuiButton-outlined:hover{background-color:#f479360f}*,:before,:after{box-sizing:border-box}body,html{color:#1f2937;background:#f4f7fb;width:100%;min-height:100vh;margin:0;font-family:Roboto,system-ui,-apple-system,sans-serif}#page{flex-direction:column;width:100%;min-height:100vh;display:flex}#header{color:#f8fafc;background:linear-gradient(120deg,#26358cbf 20%,#f4793680 100%);flex-direction:column;justify-content:center;gap:1rem;width:100%;min-height:300px;padding:1rem 1.75rem;display:flex;box-shadow:0 12px 30px #0f274947}.header-chrome{z-index:2;flex-direction:column;gap:1rem;display:flex;position:relative}#header.header--with-hero{min-height:0;box-shadow:none;background:0 0;justify-content:flex-start;gap:0;padding:0;position:relative;overflow:hidden}#header.header--with-hero .header-chrome{padding:1.65rem 1.75rem 0;position:absolute;inset:0 0 auto}.header-hero{color:#f8fafc;background:#0f172a;width:100%;min-height:620px;margin-left:0;position:relative;top:0;overflow:hidden}.header-hero-media,.header-hero-overlay{position:absolute;inset:0}.header-hero-media{opacity:.45;background-position:50%;background-repeat:no-repeat;background-size:cover}.header-hero-overlay{background:linear-gradient(120deg,#26358cc7 20%,#f4793694 100%)}.header-hero-content{z-index:1;align-items:center;min-height:620px;padding-top:9.5rem;padding-bottom:4rem;display:flex;position:relative}.header-hero-copy{line-height:1.6}.header-herLine truncated