Product texts: mapping completed; product model: solutions + resources

Two work packages, one deploy.

Workbook field mapping completed (2026-09-18)
- highlights <- g:Technical Highlight (new spec-row component of the
  full agency delivery; composeGroup() is generic, no change needed)
- applications <- g:Why Choose Card (benefit cards as one block)
- seometa <- new composed source x:seometa (Introduction body trimmed
  at a word boundary to ~155 chars - the SEO sheet ships no meta
  description, a trimmed intro beats an empty tag)
- teaser stays the hero one-liner, settling the varchar(255) question
- fix: "Save mapping" now merges over the stored mapping instead of
  overwriting it - an empty dropdown no longer wipes a stored selector

Product model: solutions relation and Resources tab (2026-09-24)
- closes the gaps the full workbook walkthrough exposed (rows the
  import deliberately skips because the model had no place for them)
- solutions: MM multi select to tx_vitec_domain_model_solution
  (tx_vitec_product_solution_mm, relatedprodukt pattern), emitted by
  both product renderers as solution cards in the shared shape
- Resources tab: inline child table tx_vitec_product_resource - per
  entry a type (documentation/support/datasheet), editable card title
  and text, an icon (free text with a value-picker seed set) and one
  link (page/url/file/record via the link wizard, so the Download tab
  works too). Deliberately no Extbase model: only the UserFunc path
  reads the rows.
- JSON `resources` (detail payload only, like heroimage): list envelope
  {layout, items[]}; a card whose link is empty or unresolvable is not
  emitted; layout switches to carousel above three cards
- spec raised to v1.18 (7.15 member table, revision row; the footer had
  been stuck at v1.15 since 1.16/1.17)

Requires on the server:
    vendor/bin/typo3 database:updateschema "*.add,*.change"
    vendor/bin/typo3 cache:flush

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
orascheandClaude Fable 5 committed 2026-09-24 14:15:43 +02:00
1 parent 4a7ea387a0
commit 3df66b1353
9 files changed
+394 -4

No files matched your search

@@ -722,6 +722,7 @@ class Product extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
$this->productimage = new ObjectStorage();
$this->heroimage = new ObjectStorage();
$this->downloads = new ObjectStorage();
$this->solutions = new ObjectStorage();
}
/**
@@ -1070,6 +1071,32 @@ class Product extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
$this->textrelatedproducts = $textrelatedproducts;
}
/**
* Solutions this product belongs to (MM). No companion property for the
* `resources` child table on purpose: it has no Extbase model - the
* headless renderers read tx_vitec_product_resource directly and the
* Extbase path never touches it.
*
* @var ObjectStorage<\Evomedien\Vitec\Domain\Model\Solution>
*/
protected $solutions;
/**
* @return ObjectStorage<\Evomedien\Vitec\Domain\Model\Solution>
*/
public function getSolutions(): ObjectStorage
{
return $this->solutions;
}
/**
* @param ObjectStorage<\Evomedien\Vitec\Domain\Model\Solution> $solutions
*/
public function setSolutions(ObjectStorage $solutions): void
{
$this->solutions = $solutions;
}
/* --------------------------------------------------------------------- */
}