Diese Kurzanleitung zeigt die erforderlichen Schritte, um ein eigenes Backend Modul in eine bereits bestehende Extbase Extension zu integrieren. Vorausgesetzt wird also eine gewöhnliche Extbase Verzeichnisstruktur inklusive der Templates, Controller, Sprachdateien etc.

Das Backend Modul wird zunächst als Untermodul in der Gruppe "Web" erzeugt. Für alle unterhalb von "Web" eingegliederten Module wird automatisch der Pagetree im Backend eingeblendet. Ebenso ist zu beachten, dass für diese Module im Persistencelayer als StoragePid automatisch die im Pagetree ausgewählte Seite verwendet wird.

Backend-Modul als Sub-Modul registrieren (ext_tables.php)

if (TYPO3_MODE=='BE')    {
    
    \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerModule(
        'Vendor.' . $_EXTKEY,
        'web',
        'mysubmodule',
        '',
        array(
          'MyController' => 'myaction',
        ),
        array(
          'access' => 'user,group',
          'icon' => 'EXT:' . $_EXTKEY . '/Resources/Public/Icons/tx_ext_mysubmodule.gif',
          'labels' => 'LLL:EXT:' . $_EXTKEY . '/Resources/Private/Language/locallang_mod_mysubmodule.xlf',
        )
    );
    
}

Alternativ zu obiger Variante kann auch eine neue Modul-Gruppe erstellt werden und weitere Sub-Module dann in diese eingegliedert werden. Inzwischen ist es sogar möglich, dabei auf die konventionelle Methode (ExtensionManagementUtility::addModule()) zur Registrierung des Hauptsmodules zu verzichten (und hierfür ebenfalls ExtensionUtility::registerModule() zu verwenden), womit dann auch die unschöne ausgelagerte Modulkonfiguration ("conf.php") überflüssig wird.

Das folgende Beispiel erzeugt eine neue Modul-Gruppe mit dem Namen "mymainmodule". Ein eigenes Sub-Modul kann nun, wie im Schritt "Backend Modul als Sub-Modul registrieren" beschrieben innerhalb dieser neuen Hauptmodul-Gruppe erzeugt werden. Hierzu muss lediglich der Name des neuen Haupt-Modules ("mymainmodule") der Funktion ExtensionUtility::registerModule() als zweiter Parameter übergeben werden.

Neue Hauptmodul-Gruppe registrieren (ext_tables.php)

if (TYPO3_MODE=='BE')    {

    \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerModule(
        'Vendor.' . $_EXTKEY,
        'mymainmodule',
        '',
        '',
        array(
        ),
        array(
          'access' => 'user,group',
          'icon' => 'EXT:' . $_EXTKEY . '/Resources/Public/Icons/tx_ext_mymainmodule.gif',
          'labels' => 'LLL:EXT:' . $_EXTKEY . '/Resources/Private/Language/locallang_mod_mymainmodule.xlf',
        )
    );
    
}

Die so erzeugte Hauptmodul-Gruppe wird von der Reihenfolge an das Ende der bereits bestehenden Hauptmodule gesetzt. Um die Reihenfolge zu ändern ist leider weiterhin ein Eingriff in $TBE_MODULES erforderlich. Dieser muss natürlich vor der Registrierung der Module erfolgen. Folgender Code ist notwendig, um das neue Hauptmodul "mymainmodule" nach dem Modul "Web" einzugliedern.

Hauptmodul-Gruppe verschieben (ext_tables.php)

if (!isset($TBE_MODULES['mymainmodule'])) {
	$temp_TBE_MODULES = array();
	foreach ($TBE_MODULES as $key => $val) {
		if ($key == 'web') {
			$temp_TBE_MODULES[$key] = $val;
			$temp_TBE_MODULES['mymainmodule'] = '';
		} else {
			$temp_TBE_MODULES[$key] = $val;
		}
	}
	$TBE_MODULES = $temp_TBE_MODULES;
}