如何向 TYPO3 前端插件添加操作? [英] How can I add an action to a TYPO3 frontend plugin?
问题描述
我正在使用 powermail
并使用 powermail_extended
对其进行扩展,并希望在前端插件正在执行的操作中添加新操作.
I am using powermail
and extending it with powermail_extended
and want to add a new action to what the frontend plugin is doing.
扩展控制器不是问题:它通过 XCLASS 过载:
Extending the Controller is not the issue: It is overloaded via XCLASS:
config.tx_extbase.objects {
In2codePowermailControllerFormController.className = In2codePowermailExtendedControllerFormController
}
但是仅仅调用这个动作是不够的,因为首选项存储在后端的前端插件中.此前端插件在 powermail 的 ext_localconf.php
中配置.如何向此前端插件添加新操作?
But simply calling this action is not enough, because the prefences are stored in the frontend plugin in the backend. This frontend plugin is configured in ext_localconf.php
of powermail. How can a add a new action to this frontend plugin?
(使用 TYPO3 7 LTS)
(Using TYPO3 7 LTS)
推荐答案
看完TYPO3CMSExtbaseUtilityExtensionUtility::configurePlugin
的代码,其实比我想象的要简单:
After reading the code of TYPO3CMSExtbaseUtilityExtensionUtility::configurePlugin
it is actually easier than I thought:
将以下代码添加到powermailextended的ext_localconf.php
中:
Add the following code to ext_localconf.php
of powermailextended:
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 TYPO3CMSExtbaseUtilityExtensionUtility::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
中):
You can use it like this (also in ext_localconf.php
):
configure_plugin_add_action('In2code.powermail', 'Pi1', 'Form', 'debug', false);
这应该在 Typo3 7-9 中工作(因为 configurePlugin
-Function 并没有真正改变).
This should work in Typo3 7-9 (as the configurePlugin
-Function didn't really change).
这篇关于如何向 TYPO3 前端插件添加操作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!