per sub-market (25, grouped by the 9 main markets): VITEC-styled Read me, a Page-layout sheet embedding the Figma design with section markers, DB-live dropdowns, soft character limits, a hidden Meta sheet and named input cells. Names must NOT start with a cell-reference token - Excel silently strips s1_-style names as repairs. vitec:import-submarket-workbooks (dry-run default, idempotent) finds or creates the page below its main market (hidden, layout 21), fills the six colPos slots updating in place and never deleting, links detail_page on the market record, downloads asset URLs into fileadmin/submarket_import/ for editorial review and writes the flexforms as DataHandler arrays. Reading is three-layered after a bruising day of real-world Excel: named ranges first, then a label scan over the locked column A with section tracking - a customer save stripped ALL defined names and shifted rows, so fixed addresses are not a contract. Learned and fixed along the way: DuplicationBehavior moved to Resource\Enum in v14; sys_file_reference rows via DataHandler need pid/tablenames/uid_foreign or are dropped silently; handing DataHandler a fresh NEW reference per run STACKS live references on re-import (caught by a double-run test), so attachments are now content-idempotent - the existing live reference is reused or retargeted and surplus duplicates are deleted via cmdmap; RequestFactory replaces GeneralUtility::getUrl so download failures carry their reason - which surfaced that the dev basic auth blocked the server itself (server IP + loopback now allowlisted, which a future SSR needs anyway) and that the core resource-consistency check rightly rejects HTML masquerading as PNG. Verified end to end on Broadcast & Media from a clean slate, twice in a row: 12 elements in colPos 110-160, layout-21 payload, both images attached exactly once with publicUrl in the JSON; second run reports nothing but unchanged.
51 lines
1.1 KiB
YAML
51 lines
1.1 KiB
YAML
# Sub-market template section 6 (spec 2026-10-01).
|
|
name: vitec/market-insights
|
|
group: vitec_custom_components
|
|
prefixFields: true
|
|
prefixType: vendor
|
|
|
|
fields:
|
|
- identifier: text1
|
|
type: Textarea
|
|
rows: 4
|
|
|
|
- identifier: text2
|
|
type: Textarea
|
|
rows: 4
|
|
|
|
- identifier: insights_cta_section
|
|
type: Palette
|
|
label: CTA (optional)
|
|
fields:
|
|
- identifier: cta_label
|
|
type: Text
|
|
max: 40
|
|
- identifier: cta_target
|
|
type: Text
|
|
max: 500
|
|
|
|
- identifier: insights_video_section
|
|
type: Palette
|
|
label: Video card (optional - empty url hides the card)
|
|
fields:
|
|
- identifier: video_person
|
|
type: Text
|
|
max: 80
|
|
- identifier: video_role
|
|
type: Text
|
|
max: 120
|
|
- type: Linebreak
|
|
- identifier: video_title
|
|
type: Text
|
|
max: 120
|
|
- type: Linebreak
|
|
- identifier: video_url
|
|
type: Text
|
|
max: 500
|
|
- type: Linebreak
|
|
- identifier: video_cover
|
|
type: File
|
|
minitems: 0
|
|
maxitems: 1
|
|
allowed: common-image-types
|