Schlagwort-Archiv: extbase

Extbase Backend Modul als Hauptmodul integrieren

Bisher ist es bei Extbase Erweiterungen nur möglich, mittels Tx_Extbase_Utility_Extension::registerModule() seine eigenen Backend Module in vorhandene Module einzuklinken, sprich in web, file, user, tools usw.

Über die traditionelle Methode t3lib_extmGm::addModule() kann man sich jedoch ein Dummy-Hauptmodul erstellen, in das man die neuen Module dann als Submodule einklinken kann.

ext_localconf.php

if (TYPO3_MODE === 'BE') {
 
	$mainModuleName = str_replace('_', '', $_EXTKEY) . 'M1';
 
	// Hack damit das Modul direkt nach dem Web Modul erscheint
	// die Angabe der $position in addModule() funktioniert hier leider nicht
	if (!isset($TBE_MODULES[$mainModuleName])) {
		$temp_TBE_MODULES = array();
		foreach($TBE_MODULES as $key => $val) {
			if($key == 'web') {
				$temp_TBE_MODULES[$key] = $val;
				$temp_TBE_MODULES[$mainModuleName] = '';
			} else {
				$temp_TBE_MODULES[$key] = $val;
			}
		}
		$TBE_MODULES = $temp_TBE_MODULES;
	}
 
	// Hauptmodul erstellen
	t3lib_extMgm::addModule($mainModuleName, '', '', t3lib_extMgm::extPath($_EXTKEY).'Configuration/BackendModule/');
 
	// Erstes richtiges Backend Modul der Extension
	Tx_Extbase_Utility_Extension::registerModule(
		$_EXTKEY,
		$mainModuleName,
		'subModuleName',
		'',
		array(
		// ...
		),
		array(
		// ...
		)
	);
}

Unter Configuration/BackendModule/ (das Verzeichnis kann natürlich beliebig gewählt werden) erstellen wir noch eine conf.php:

< ?php
	/**
	 * Dummy Konfiguration fürs Haupt Backend Modul
	 */
	define('TYPO3_MOD_PATH', '../typo3conf/ext/ext_key/Configuration/BackendModule/');
	$MCONF['name'] = 'txextkeyM1';
	$MCONF['script'] = '_DISPATCH';
 
	$MCONF['access'] = 'user,group';
 
	$MLANG['default']['tabs_images']['tab'] = 'moduleicon.gif';
	$MLANG['default']['ll_ref'] = 'LLL:EXT:ext_key/Resources/Private/Language/locallang_mod_main.xml';
?>

Somit kann TYPO3 unser „Dummy“ Hauptmodul ordnungsgemäß erstellen und die eigentlichen Module werden als Kind-Module hinzugefügt.

Das Ganze sieht dann so aus:

Extbase Plugins mit TypoScript einbinden

TYPO3 Erweiterungen im bisherigen pi_base-Stil kann man ganz einfach mit

lib.foo < plugin.tx_extensionkey_pluginname

in ein beliebiges TypoScript Objekt einfügen.

Mit neueren Erweiterungen die man mit Extbase und Fluid erstellt, gestaltet sich das (noch) etwas schwieriger. Hier muss man einen Umweg über eine userFunc mit dem Extbase Bootstrapper gehen.

Bei dem Beispiel handelt es sich um eine kleine Webshop Erweiterung die ich für ein Projekt geschrieben habe. Ziel ist es, eine Warenkorb Übersicht in der Sidebar auszugeben:

lib.sidebar = COA
lib.sidebar {
 
    # [...]
 
    10 = USER
    10 { 
        userFunc = tx_extbase_core_bootstrap->run
 
        # TYPO3 6.0 / Namespaces Kompatibilität 
        vendorName = Foo
 
        pluginName = Pi2
        extensionName = ExtensionKey
        controller = Cart
        action = sidebar
        switchableControllerActions {
                Cart {
                        1 = sidebar
                }
        }
 
        settings =< plugin.tx_extensionkey.settings
        persistence =< plugin.tx_extensionkey.persistence
        view =< plugin.tx_extensionkey.view
 
    }
}

Jetzt muss nur noch im Cart Controller (wie im TS angegeben) die sidebarAction implementiert werden, in der unsere gewünschte Ausgabe generiert wird. Das erfolgt üblicherweise mit einem Fluid Template – dazu wiederum das entsprechende Template sidebar.html im Templates/Cart Verzeichnis anlegen, in der sidebarAction mit $this->view->assign() die Templatevariablen zuweisen und schließlich die fertige Ausgabe mit return $this->view->render(); zurückgeben. Das return Statement bitte nicht vergessen denn sonst passiert gar nichts 😉