如何在TYPO3 9 TCA中添加自定义向导?路由配置后字段配置方法
TYPO3 7 vs 9 自定义向导实现指南
嘿,我来帮你把已经配置好路由的自定义向导关联到TCA字段里!先快速区分下两个版本的核心差异,再重点讲TYPO3 9的实现步骤:
TYPO3 7 里的旧写法
在TYPO3 7中,不需要配置路由,直接在TCA的wizards数组里指定userFunc就能调用你的向导类:
// 示例:给tt_content的tx_csseo_meta_title字段加向导 $GLOBALS['TCA']['tt_content']['columns']['tx_csseo_meta_title']['config']['wizards'] = [ 'tx_csseo_preview' => [ 'type' => 'userFunc', 'userFunc' => \Clickstorm\CsSeo\UserFunc\PreviewWizard::class . '::render', 'title' => 'SEO预览', 'icon' => 'EXT:cs_seo/Resources/Public/Icons/preview.svg', ], 'tx_csseo_permalink' => [ 'type' => 'userFunc', 'userFunc' => \Clickstorm\CsSeo\UserFunc\PermalinkWizard::class . '::render', 'title' => '永久链接向导', 'icon' => 'EXT:cs_seo/Resources/Public/Icons/permalink.svg', ] ];
TYPO3 9+ 基于路由的新实现(你的场景)
你已经在Configuration/Routes.php里配置好了Symfony路由,接下来只需要在目标字段的TCA配置里关联这些路由即可:
步骤1:找到你的TCA配置文件
比如你要给自定义表或者tt_content/pages的字段加向导,找到对应的TCA文件(通常在Configuration/TCA/Overrides/目录下,比如pages.php或tt_content.php)。
步骤2:添加Wizards配置到目标字段
在字段的config数组里加入wizards配置,使用route类型关联你定义的路由:
// 示例:给pages的tx_csseo_meta_title字段添加两个向导 $GLOBALS['TCA']['pages']['columns']['tx_csseo_meta_title']['config']['wizards'] = [ 'tx_csseo_preview' => [ 'type' => 'route', // 对应你Routes.php里的路由键名 'route' => 'tx_csseo_preview', 'title' => 'SEO预览', // 向导图标,替换成你扩展里的图标路径 'icon' => 'EXT:cs_seo/Resources/Public/Icons/preview.svg', 'module' => [ 'name' => 'wizard', ], // 传递给向导的参数,TYPO3会自动替换占位符 'params' => [ 'uid' => '{record.uid}', 'table' => '{record.table}' ] ], 'tx_csseo_permalink' => [ 'type' => 'route', 'route' => 'tx_csseo_permalink', 'title' => '永久链接向导', 'icon' => 'EXT:cs_seo/Resources/Public/Icons/permalink.svg', 'module' => [ 'name' => 'wizard', ], 'params' => [ 'uid' => '{record.uid}', 'table' => '{record.table}' ] ] ];
关键配置说明
type: 'route':这是TYPO3 9+的新类型,告诉系统用你配置的Symfony路由来调用向导route:必须和你Routes.php里定义的路由键名完全一致(比如tx_csseo_preview)params:这里的{record.uid}和{record.table}是TYPO3的动态占位符,会自动替换为当前编辑记录的ID和表名,你的向导类可以通过$request->getQueryParams()获取这些参数icon:记得用EXT路径指向你扩展里的图标文件,提升后台体验
最后一步:清除缓存
配置完成后,一定要清除TYPO3的全部缓存(包括配置缓存和路由缓存),否则新的配置不会生效!
内容的提问来源于stack exchange,提问作者mhirdes
相关产品推荐
相关产品推荐

