- The three market Content Blocks preview as compact collapsible rows:

thumbnail of the actual image (hero background, intro image, insights
  cover), key copy in the summary line, full details expanded; card and
  intro-paragraph previews are wrapped in the same mechanism
- New SubmarketPluginPreview for vitec_usecaselist / vitec_productfeature /
  vitec_productlist: instead of bare standard boxes they now list the
  selected story titles (flagging stories that still lack a quote), the
  featured product and the hand-picked products in order
- Container-style collapse for whole page-module COLUMNS: a chevron at the
  right of every column header folds a section down to its title row,
  state kept per page and colPos in localStorage - the slot view of a
  sub-market page folds to six slim bands
- Previews sit under the page module's pointer-events lock and its
  click-to-edit layer: pointer events are re-enabled inside the collapse
  markup and the toggle runs on pointerdown in the capture phase
- Two more v14 removals fixed on the way, both latent in the OLDER preview
  classes too (Usecaseshow, Modelcard would have crashed the page module):
  GridColumnItem::getRecord() now returns a Domain\Record object, and
  StandaloneView is gone - previews normalize the record via a shared
  helper and render through the ViewFactory
This commit is contained in:
orasche committed 2026-10-02 15:00:05 +02:00
1 parent 67be9de316
commit 78af83d2e3
12 files changed
+465 -23

No files matched your search

@@ -11,7 +11,6 @@ use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Resource\ResourceFactory;
use TYPO3\CMS\Core\Service\FlexFormService;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Fluid\View\StandaloneView;
/**
* Page-module preview for the VITEC Card plugin (vitec_modelcard):
@@ -45,7 +44,7 @@ class ModelcardPreviewRenderer extends StandardContentPreviewRenderer
public function renderPageModulePreviewContent(GridColumnItem $item): string
{
try {
$record = $item->getRecord();
$record = $this->recordArray($item);
$flexFormService = GeneralUtility::makeInstance(FlexFormService::class);
$flexFormData = $flexFormService->convertFlexFormContentToArray($record['pi_flexform'] ?? '');
@@ -77,8 +76,12 @@ class ModelcardPreviewRenderer extends StandardContentPreviewRenderer
}
}
$view = GeneralUtility::makeInstance(StandaloneView::class);
$view->setTemplatePathAndFilename('EXT:vitec/Resources/Private/Templates/Preview/Modelcard.html');
// v14: StandaloneView was removed - views come from the ViewFactory.
$view = GeneralUtility::makeInstance(\TYPO3\CMS\Core\View\ViewFactoryInterface::class)
->create(new \TYPO3\CMS\Core\View\ViewFactoryData(
templatePathAndFilename: 'EXT:vitec/Resources/Private/Templates/Preview/Modelcard.html',
request: $GLOBALS['TYPO3_REQUEST'] ?? null,
));
$view->assignMultiple([
'typeLabel' => self::TYPE_LABELS[$modelType] ?? $modelType,
'layout' => $layout,
@@ -124,4 +127,21 @@ class ModelcardPreviewRenderer extends StandardContentPreviewRenderer
}
return '';
}
/**
* v14: GridColumnItem::getRecord() returns a Domain\Record object, no
* longer an array (found 2026-10-02 - crashed the page module preview).
* Normalizes both shapes to the raw database array.
*
* @return array<string,mixed>
*/
private function recordArray(GridColumnItem $item): array
{
$record = $item->getRecord();
if ($record instanceof \TYPO3\CMS\Core\Domain\Record) {
$raw = $record->getRawRecord();
return $raw !== null ? $raw->toArray() : [];
}
return (array)$record;
}
}