Wenn man ein auf Extbase/Fluid-Basis erstelltes Plugin auf jeder Seite einsetzen möchte, dann braucht man folgenden Code im Setup des Seitentemplates:
temp.myPlugin = USER temp.myPlugin { userFunc = tx_extbase_core_bootstrap->run pluginName = MyPlugin extensionName = MyExtension settings =< plugin.tx_myextension.settings persistence =< plugin.tx_myextension.persistence view =< plugin.tx_myextension.view }
Statt MyPlugin und MyExtension muss man natürlich den Namen des eigenen Plugins und der Extension einsetzen. Wichtig ist, dass das Plugin mit configurePlugin und registerPlugin in ext_localconf.php bzw. ext_tables.php registriert und konfiguriert ist. In meinem Fall ist MyPlugin so konfiguriert, dass TestController->listAction aufgerufen werden soll.
Nun hatte ich das Problem, dass ich meine Klassen bereits nach TYPO3 6 Manier also mit Namespaces geschrieben habe. Wenn der Extbase Bootstrapper aber aus den Angaben den Controller-Klassennamen zusammenbaut, dann bekommt er folgendes: Tx_MyExtension_Controller_TestController. Die Klasse existiert natürlich nicht, denn sie heißt genamespaced ja so: \Vendor\MyExtension\Controller\TestController.
Ich habe rausgefunden, dass es eine ClassAliasMapper.php gibt, in der die alten Klassennamen auf die neuen Namen mit Namespace gemappt werden. So funktioniert ja z.B. der Aufruf Tx_Extbase_Core_Bootstrap immer noch, obwohl es die Klasse nicht gibt. Dann hab ich rausgefunden, dass alle Extensions nach der gleichen Datei durchsucht werden und diese Mapping-Liste erweitert wird. Im Extension-Ordner die Ordnerstruktur Migrations/Code/ und darin die Datei ClassAliasMap.php anlegen. Die Datei hat folgenden Inhalt:
return array( 'Tx_MyExtension_Controller_TestController' => 'Vendor\\MyExtension\\Controller\\TestController' );
Hi, danke für den Tipp, hat mit weitergeholfen.
Kleine Sache am Rande: der Extension-Ordner muss
Migrations/Code/ und nicht
Migrations/Core/ heißen
und ich würde noch das Tx_ vor dem Extention Namen schreiben, also:
Tx_MyExtension_Controller_TestController
Achso und da ich so kleinlich bin, der Vendor Name muss natürlich mit dem in der ext_localconf.php verwendeten übereinstimmen. Wenn man seine Extention per Extention Builder erstellt hat, ist das meistens TYPO3, es sei denn, man hat was anderes angegeben.
Danke. Die zwei Sachen habe ich geändert.
Danke für den Hinweis mit dem Vendor. Man sollte es unbedingt ändern, denn der Vendor TYPO3 ist eigentlich für Core-Classen reserviert.
Wenn man auf einer Seite mal eine andere default-Action benötigt, klappt das wie folgt: (Die zusätzliche action muss natürlich in ext_localconf.php registriert sein)
lib.foo = USER
lib.foo {
userFunc = tx_extbase_core_bootstrap->run
extensionName = MyExtension
pluginName = MyPlugin
switchableControllerActions {
MyController {
1 = listspecial
}
}
}