我正在使用powermail
并使用powermail_extended
扩展它,并希望为前端插件正在执行的操作添加新操作。
扩展Controller不是问题:它通过XCLASS重载:
config.tx_extbase.objects {
In2code\Powermail\Controller\FormController.className = In2code\PowermailExtended\Controller\FormController
}
但仅仅调用此操作是不够的,因为prefences存储在后端的前端插件中。此前端插件在ext_localconf.php
的powermail中配置。如何在此前端插件中添加新操作?
(使用TYPO3 7 LTS)
答案 0 :(得分:2)
在阅读\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin
的代码后,它实际上比我想象的更容易:
将以下代码添加到powermailextended的ext_localconf.php
:
if (!function_exists('configure_plugin_add_action')) {
/**
* Add a action to a existing frontend plugin
*
* @param string $extensionName The extension name (in UpperCamelCase) or the extension key (in lower_underscore)
* @param string $pluginName must be a unique id for your plugin in UpperCamelCase (the string length of the extension key added to the length of the plugin name should be less than 32!)
* @param string $controllerName Name of the Controller
* @param string $newAction Name of the action
* @param bool $cachable Can this action be cached?
*
* @see \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin
*/
function configure_plugin_add_action($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;
}
}
}
您可以像这样使用它(也在ext_localconf.php
中):
configure_plugin_add_action('In2code.powermail', 'Pi1', 'Form', 'debug', false);
这应该适用于Typo3 7-9(因为configurePlugin
- 功能并没有真正改变)。