TYPO3 Tipps und Tricks: (bestehendes) Plugin erweitern / Extend existing Plugin

In diesem Blogbeitrag zeigen wir, wie man ein bestehendes Plugin (aus einer anderen Extension) erweitern und eine neue action hinzufügen kann.

Um ein bestehendes Extbase-Plugin zu erweitern, muss man den Eintrag des Plugins in den TYPO3_CONF_VARS erweitern. Hierfür haben wir folgende Hilfs-Methode erstellt:

public static function configurePluginAddAction($extensionName, $pluginName, $controllerName, $newAction, $cachable = true) {	$delimiterPosition = strrpos($extensionName, '.');	if ($delimiterPosition !== false) {		$extensionName = substr($extensionName, $delimiterPosition + 1);	}	$extensionName = str_replace(' ', '', ucwords(str_replace('_', ' ', $extensionName)));	$newAction = trim($newAction);	$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['plugins'][$pluginName]['controllers'][$controllerName]['actions'][] = $newAction;	if (!$cachable) {		$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['plugins'][$pluginName]['controllers'][$controllerName]['nonCacheableActions'][] = $newAction;	}}

Anschließend muss in der Datei ext_localconf.php noch der passende Aufruf erstellt werden. In diesem Beispiel erwetiern wird das Cart-Plugin der TYPO3 Cart Extension (für ecommerce unter TYPO3) um eine neue action namens "cashdesk".

\Varioous\VaTemplate\Utility\HelperUtility::configurePluginAddAction(	'Cart',	'Cart',	'Extcode\Cart\Controller\Cart\CartController',	'cashdesk',	false);

Im nächsten Schritt haben wir den Cart-Controller von Cart per XCLASSes (Extending Classes) um die neue action erweitert:

$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][\Extcode\Cart\Controller\Cart\CartController::class] = [	'className' => \Varioous\VaTemplate\Xclass\CartController::class,];

Und hier noch die neue CartController-Klasse, welche vom CartController der cart-Extension erbt:

<?phpnamespace Varioous\VaTemplate\Xclass;class CartController extends \Extcode\Cart\Controller\Cart\CartController{    public function cashdeskAction()    {    }}