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

TYPO3扩展如何添加第二个后台导航模块

在TYPO3扩展中添加第二个后台导航模块的解决方案

嘿,我来帮你搞定这个需求!你的现有代码已经在创建自定义模块分类InstitutsShop了,接下来我们用TYPO3官方推荐的方式注册第二个模块,比手动操作TBE_MODULES更规范可靠。

优化模块分类的创建逻辑

首先可以把你现有循环TBE_MODULES的代码简化成更清晰的写法,确保分类插入到web模块之后:

if (TYPO3_MODE === 'BE') {
    // 定义自定义模块分类的名称
    $moduleCategory = 'InstitutsShop';

    // 如果分类不存在,就插入到"web"模块之后
    if (!isset($TBE_MODULES[$moduleCategory])) {
        $tbeModulesKeys = array_keys($TBE_MODULES);
        $webModulePosition = array_search('web', $tbeModulesKeys);
        
        // 拆分现有模块数组,插入自定义分类
        $tempTbeModules = array_slice($TBE_MODULES, 0, $webModulePosition + 1, true);
        $tempTbeModules[$moduleCategory] = '';
        $tempTbeModules += array_slice($TBE_MODULES, $webModulePosition + 1, null, true);
        
        $TBE_MODULES = $tempTbeModules;
    }

注册第二个后台模块

接下来用ExtensionUtility::registerModule方法注册第二个模块,这个是TYPO3 Extbase扩展的标准做法,支持权限控制、图标、语言标签等配置。在上面的代码后面继续添加:

// 1. 注册第一个现有模块(示例)
    \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerModule(
        'VendorName.InstitutsShop', // 替换为你的扩展标识(厂商名.扩展key)
        $moduleCategory, // 所属的自定义模块分类
        'main', // 模块唯一标识key
        '', // 位置:空表示分类下的第一个模块
        [
            'Product' => 'list,show,new,create,edit,update,delete',
            // 这里填写该模块对应的控制器和允许的动作
        ],
        [
            'access' => 'user,group', // 访问权限:普通用户/组可访问
            'icon' => 'EXT:instituts_shop/Resources/Public/Icons/module-main.svg', // 模块图标路径
            'labels' => 'LLL:EXT:instituts_shop/Resources/Private/Language/locallang_mod_main.xlf', // 语言文件路径
        ]
    );

    // 2. 注册第二个后台模块
    \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerModule(
        'VendorName.InstitutsShop',
        $moduleCategory, // 同样归属于自定义分类InstitutsShop
        'settings', // 第二个模块的唯一标识key,不能和第一个重复
        'after:main', // 位置:放在第一个模块"main"的后面
        [
            'Setting' => 'list,show,edit,update',
            // 第二个模块对应的控制器和动作
        ],
        [
            'access' => 'admin', // 可以设置不同权限,比如仅限管理员访问
            'icon' => 'EXT:instituts_shop/Resources/Public/Icons/module-settings.svg',
            'labels' => 'LLL:EXT:instituts_shop/Resources/Private/Language/locallang_mod_settings.xlf',
        ]
    );
}

关键注意事项

  • 替换占位符:把VendorName换成你的扩展厂商名称,InstitutsShop是你的扩展key,控制器和动作要对应自己的代码逻辑。
  • 唯一模块key:每个模块的第三个参数(比如main、settings)必须唯一,不能重复。
  • 语言文件:要确保对应的语言文件存在,里面定义了模块的名称和描述,比如locallang_mod_settings.xlf里要有module.settings相关的标签。
  • 图标文件:准备好模块的SVG图标,放在对应的资源目录下,确保路径正确。
  • 权限控制:根据需求调整access参数,可选值有user,group(普通用户)、admin(仅限管理员)等。

内容的提问来源于stack exchange,提问作者Felix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:07:54