You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 14:42:26