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
} |
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'
); |
return array(
'Tx_MyExtension_Controller_TestController' => 'Vendor\\MyExtension\\Controller\\TestController'
);
Neueste Kommentare