config { pageTitleProviders { vitec { provider = Evomedien\Vitec\PageTitle\ProductPageTitleProvider before = record before = seo } } } # ============================================================================= # Headless list-plugin JSON renderers # # `tt_content.list.20.` renders the element body for that subtype # (only ever invoked for the matching list_type — safe as-is). # # `tt_content.list.fields.content.fields.` is GLOBAL: without scoping it # would inject into EVERY list plugin's content. Each such field is # therefore guarded with: # stdWrap.if { equals.field = list_type ... } -> empty for other plugins # ifEmptyUnsetKey = 1 -> empty key removed entirely # (headless JsonContentObject honours ifEmptyUnsetKey: '' / false => unset). # ============================================================================= # --- vitec_productlist -------------------------------------------------------- tt_content.list.20.vitec_productlist = USER tt_content.list.20.vitec_productlist { userFunc = Evomedien\Vitec\UserFunc\ProductListJsonRenderer->render } tt_content.list.fields.content.fields.products = USER tt_content.list.fields.content.fields.products { userFunc = Evomedien\Vitec\UserFunc\ProductListJsonRenderer->render stdWrap.if { value = vitec_productlist equals.field = list_type } ifEmptyUnsetKey = 1 } # --- vitec_productshow -------------------------------------------------------- tt_content.list.20.vitec_productshow = USER tt_content.list.20.vitec_productshow { userFunc = Evomedien\Vitec\UserFunc\ProductShowJsonRenderer->render } tt_content.list.fields.content.fields.product = USER tt_content.list.fields.content.fields.product { userFunc = Evomedien\Vitec\UserFunc\ProductShowJsonRenderer->render stdWrap.if { value = vitec_productshow equals.field = list_type } ifEmptyUnsetKey = 1 } # --- vitec_usecaselist -------------------------------------------------------- tt_content.list.20.vitec_usecaselist = USER tt_content.list.20.vitec_usecaselist { userFunc = Evomedien\Vitec\UserFunc\UsecaseListJsonRenderer->render } tt_content.list.fields.content.fields.usecases = USER tt_content.list.fields.content.fields.usecases { userFunc = Evomedien\Vitec\UserFunc\UsecaseListJsonRenderer->render stdWrap.if { value = vitec_usecaselist equals.field = list_type } ifEmptyUnsetKey = 1 } # 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'