TYPO3中IRRE内联记录如何实现关联图片的后台预览功能?
你之前配置不生效的核心原因是headerThumbnail.field默认仅支持直接存储sys_file UID的字段,而你用的是关联sys_file_reference的FAL类型字段,无法直接读取到对应图片的UID,对应解决方案如下:
方案1:TYPO3 12 LTS及以上版本(最优解)
TYPO3 12已经原生支持你提到的IRRE内联记录自定义预览机制,即inlinePreviewRenderer,和内容元素的previewRenderer逻辑一致,完全满足自定义展示样式、多图预览的需求:
- 在你的幻灯片子记录表的TCA
ctrl段加入配置:
'ctrl' => [ // 其余原有配置保留 'inlinePreviewRenderer' => \你的扩展命名空间\Preview\SlideInlinePreviewRenderer::class, ],
- 实现对应的预览渲染类:
<?php namespace 你的扩展命名空间\Preview; use TYPO3\CMS\Backend\Preview\InlinePreviewRendererInterface; use TYPO3\CMS\Backend\Utility\BackendUtility; use TYPO3\CMS\Core\Imaging\ImageManipulation\CropVariantCollection; use TYPO3\CMS\Core\Resource\ProcessedFile; use TYPO3\CMS\Core\Resource\ResourceFactory; use TYPO3\CMS\Core\Utility\GeneralUtility; class SlideInlinePreviewRenderer implements InlinePreviewRendererInterface { public function renderHeaderPrepend(array $data): string { $record = $data['record']; $html = ''; // 读取关联的FAL图片 $fileReferences = BackendUtility::resolveFileReferences('你的幻灯片子表名', 'image', $record); if (!empty($fileReferences)) { $resourceFactory = GeneralUtility::makeInstance(ResourceFactory::class); foreach ($fileReferences as $ref) { $file = $ref->getOriginalFile(); $cropVariantCollection = CropVariantCollection::create((string)$ref->getProperty('crop')); $cropArea = $cropVariantCollection->getCropArea('default'); $processedFile = $file->process( ProcessedFile::CONTEXT_IMAGEPREVIEW, [ 'width' => '45', 'height' => '45c', 'crop' => $cropArea->makeAbsoluteBasedOnFile($file), ] ); $html .= '<img src="' . htmlspecialchars($processedFile->getPublicUrl()) . '" alt="" style="margin-right: 8px; vertical-align: middle;">'; } } return $html; } public function renderTitle(array $data): string { // 自定义标题展示,这里直接返回原标题即可 return $data['record']['title'] ?? ''; } }
方案2:TYPO3 11 LTS及更早版本
简便实现(单图场景)
给你的幻灯片子记录新增一个只读字段thumbnail_uid,类型为整数,配置TCA为隐藏不展示在表单中,通过TCEmain钩子或者DataHandler钩子在保存子记录时,自动将关联的第一张图片的sys_file UID写入该字段,再修改你的原有headerThumbnail配置指向该字段即可:
'appearance' => [ 'headerThumbnail' => [ 'field' => 'thumbnail_uid', 'width' => '45', 'height' => '45c', ], ]
自定义userFunc方案
如果不想新增字段,可以直接配置headerThumbnail的userFunc自定义渲染逻辑:
'appearance' => [ 'headerThumbnail' => [ 'userFunc' => \你的扩展命名空间\UserFunc\SlideThumbnail::class . '->render', 'width' => '45', 'height' => '45c', ], ]
在对应的userFunc类中,接收当前IRRE记录参数,自行读取FAL关联生成缩略图返回即可。
内容的提问来源于stack exchange,提问作者Jacco van der Post
相关产品推荐
相关产品推荐

