TYPO3 Extbase插件迁移为CType后,如何在Fluid模板获取CE的data对象?
问题
已按照官方文档成功将TYPO3 Extbase扩展的插件从list_type迁移为CType,后端运行一切正常,前端也能显示预期的扩展内容。但内容元素(CE)的常规data对象无法获取,导致此前可在fluid_styled_content的List.html模板中显示的CE标题等重要数据无法再呈现。
请问如何在我的扩展插件模板中正确获取data对象?
背景说明:我的扩展通过控制器动作展示数据模型中的信息,并非站点包中的自定义内容元素。插件在ext_localconf.php中配置如下:
ExtensionUtility::configurePlugin( 'MyExtension', 'MyPlugin', [MyExtController::class => 'list, show'], [], ExtensionUtility::PLUGIN_TYPE_CONTENT_ELEMENT );
解决方法
当把Extbase插件声明为PLUGIN_TYPE_CONTENT_ELEMENT类型后,内容元素的data对象不会自动传入Extbase视图,需要手动处理才能获取:
方法一:控制器动作中手动获取并传递
在你的控制器(如MyExtController)的目标动作(比如listAction)里,通过请求对象获取当前内容元素实体,再提取data数组传递给模板:
public function listAction() { // 获取当前内容元素实体 $currentContentElement = $this->request->getAttribute('currentContentElement'); // 转为数组格式的data对象 $ceData = $currentContentElement->toArray(); // 将data赋值给模板变量 $this->view->assign('data', $ceData); // 原有业务逻辑保持不变 $items = $this->yourModelRepository->findAll(); $this->view->assign('items', $items); }
完成后就能在插件的Fluid模板中直接调用{data.header}、{data.bodytext}等字段,也可以调试输出完整结构:
<h2>{data.header}</h2> <p>{data.bodytext}</p> <!-- 调试用:输出所有data字段 --> <pre>{data -> f:format.dump()}</pre>
方法二:通过TypoScript自动注入
如果不想修改控制器代码,可以在扩展的Configuration/TypoScript/setup.typoscript中添加视图配置,自动将当前内容元素的data注入模板:
plugin.tx_myextension { view { variables { data = TEXT data.data = currentContentElement.data } } }
配置生效后,无需修改控制器,模板中就能直接使用{data}变量。
注意:TYPO3 11及以上版本中,控制器的$request属性默认可用,无需额外注入。
内容的提问来源于stack exchange,提问作者clive beckett
相关产品推荐
相关产品推荐

