Product text import from agency XLSX workbooks

VITEC Import module: Products tab is now a searchable/sortable product
overview. "Edit Product" opens an XLSX upload with per-field source
mapping (component + cell), old/new preview and checkbox apply via
DataHandler; the mapping and manual matches are persisted and preselect
the next workbook. Category workbooks are detected and rejected.

- new: ProductXlsxReader (PhpSpreadsheet), ProductTextImportController,
  Products/ProductTexts templates, 4 module routes
- related products: per-pair card text in new side table
  tx_vitec_product_related_text (survives MM rewrites), emitted as
  `cardtext` in the product JSON; missing MM relations added add-only
- card copy read from Body Copy (D) with fallback to CTA/Card Copy (E) -
  the workbooks fill either depending on row type
- product detail page <title> now uses seotitle with title fallback
  (provider made singleton and fed from the JSON renderer)
- per-user recent-search badges; last loaded workbook stored per product
  (tx_vitec_product_workbook), Edit Product reopens on it
- composer: add phpoffice/phpspreadsheet ^5.9
- diagnostics: migrations/check_workbook.php
This commit is contained in:
orasche committed 2026-08-21 11:00:45 +02:00
1 parent 12eb40614b
commit 7bd1161abf
28 files changed
+2594 -39

No files matched your search

@@ -127,3 +127,28 @@ mod.web_layout.tt_content.preview {
# Hinweis: Content-Blocks-Previews werden automatisch aus
# packages/vitec/ContentBlocks/ContentElements/<n>/templates/backend-preview.html geladen.
# Keine separate Registrierung nötig.
############################################################
# Link browser: record links to VITEC domain models.
# Stored as t3://record?identifier=download|product&uid=N -
# frontend resolution lives in setup.typoscript (config.recordLinks).
############################################################
TCEMAIN.linkHandler {
download {
handler = TYPO3\CMS\Backend\LinkHandler\RecordLinkHandler
label = Download
configuration {
table = tx_vitec_domain_model_download
}
displayAfter = file
}
product {
handler = TYPO3\CMS\Backend\LinkHandler\RecordLinkHandler
label = Product
configuration {
table = tx_vitec_domain_model_product
}
displayAfter = download
}
}