Files
VITEC-website/packages/vitec/Configuration/TypoScript/Headless/vitec_containers.typoscript
o-rasche bb7c03235d Checkpoint: headless JSON architecture documented + cleanup (Stufe 1+2)
Restore point before Stufe 3 (central resolver-service refactoring).

Includes this session's work:
- Success Story (usecase) rebuild: new fields/tabs, UsecaseSerializer,
  thin List/Show renderers, MM relations, inline content elements.
- vitec_columns content block (two-column layout with per-item content)
  incl. unified header section; special-cased JSON resolution.
- Container per-column flex (items[].config align/justify) + gap on parent.
- Unified header section across CEs/plugins/containers; header fields in JSON.
- ISO-style architecture spec: Documentation/Headless-JSON-Architecture.md.
- Cleanup: removed local scratch + verified .bak backups.
- Fixes: B-6 (undefined thumbnail variable in Downloadcardcollection image
  resolver), B-7 (unsatisfiable legacy CType OR branch in Downloadcard/Datasheets).

Rollback: git reset --hard snapshot-2026-07-09-pre-stufe3

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-09 10:01:56 +02:00

155 lines
5.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# 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).
#
# Per-column flex settings (align/justify) live on the PARENT record
# (tx_vitec_col{1..4}_align/justify) and are attached by the processor to each
# column in `items` (items[].config.align/justify) — so they apply to ALL
# children of that column. The whole-grid gap (tx_vitec_gap) is emitted here as
# the parent-level `gap`.
# =============================================================================
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
headerLayout = INT
headerLayout.field = header_layout
headerPosition = TEXT
headerPosition.field = header_position
headerLink = TEXT
headerLink {
htmlSpecialChars = 1
typolink {
parameter.field = header_link
returnLast = result
}
}
tx_vitec_bg_variant = TEXT
tx_vitec_bg_variant.field = tx_vitec_bg_variant
# Parent-level: column gap scale (15) for the whole grid.
gap = TEXT
gap.field = tx_vitec_gap
# Columns with their children + per-column flex (align/justify) in
# items[].config — assembled by ContainerChildrenProcessor.
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
# -----------------------------------------------------------------------------
# VITEC · Container — single-column container with a custom CSS class.
# Inherits the full structure of the grid containers and adds the `cssClass`
# field, read from the element's FlexForm (settings.cssClass).
# Single column -> no grid gap.
# -----------------------------------------------------------------------------
tt_content.vitec_container < tt_content.vitec_cols_50_50
tt_content.vitec_container.fields.gap >
tt_content.vitec_container.fields.cssClass = TEXT
tt_content.vitec_container.fields.cssClass.data = flexform:pi_flexform:settings.cssClass
tt_content.vitec_container.fields.cssClass.stdWrap.ifEmpty.cObject = TEXT
tt_content.vitec_container.fields.cssClass.stdWrap.ifEmpty.cObject.value =
# -----------------------------------------------------------------------------
# VITEC · Cards Carousel — container whose children (typically vitec_card
# elements) become the slides. Inherits the grid-container JSON structure
# (`items` via ContainerChildrenProcessor) and adds carousel settings read
# from the element's FlexForm. Single slide track -> no grid gap.
# -----------------------------------------------------------------------------
tt_content.vitec_cards_carousel < tt_content.vitec_cols_50_50
tt_content.vitec_cards_carousel.fields.gap >
tt_content.vitec_cards_carousel.fields.carousel = JSON
tt_content.vitec_cards_carousel.fields.carousel {
fields {
slidesPerView = TEXT
slidesPerView.data = flexform:pi_flexform:settings.slidesperview
showArrows = TEXT
showArrows.data = flexform:pi_flexform:settings.showarrows
showIndicators = TEXT
showIndicators.data = flexform:pi_flexform:settings.showindicators
loop = TEXT
loop.data = flexform:pi_flexform:settings.loop
autoplay = TEXT
autoplay.data = flexform:pi_flexform:settings.autoplay
autoplayInterval = TEXT
autoplayInterval.data = flexform:pi_flexform:settings.autoplayinterval
}
}
tt_content.vitec_cards_carousel.fields.cssClass = TEXT
tt_content.vitec_cards_carousel.fields.cssClass.data = flexform:pi_flexform:settings.cssClass