如何在 typo3 7 TCA 中添加自定义向导?
How to add custom wizards in typo3 7 TCA?
当我尝试在 TCA 中添加名为 wizard_geo_selector 的向导时,出现错误 "module not registered"。请告诉我如何在 TCA 中正确注册该向导。?
IN TCA 添加如下向导:
'module' => array(
'name' => 'wizard_geo_selector',
),
在 ext_tables.php 中注册向导。
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addModulePath(
'wizard_geo_selector',
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath($_EXTKEY) . 'Modules/Wizards/Yourwizardname/'
);
请记住,自 Typo3 7 起已弃用此方法并在 Typo3 中删除 8.So 您可以在 Typo3 之前使用此方法 7.For Typo3 8 请使用下面 David 指定的方法。
Ricky 的回答不再有效,因为 addModulePath 从版本 7 开始就被弃用了。
此外,像这样注册模块仍然会出现您所说的错误。
唯一让向导继续运行的是:
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addModule('wizard','pbsurvey_answers',"",\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath($_EXTKEY).'wizard/');
但是当您添加它时,该模块会在您的 TYPO3 后端中显示为一个新点。
TYPO3 Version 7.6 中添加了如下新向导:
- 在您的扩展中创建目录
Configuration/Backend/
- 在新目录中创建一个文件
Routes.php
,它会自动找到,不需要提及in ext_localconf.php
或ext_tables.php
。如果您仍然需要 Ajax,您可以在同一文件夹中添加文件 AjaxRoutes.php
。
Routes.php
的内容:
return array(
'my_wizard_element' => array(
'path' => '/wizard/tx_geoselecotor/geo_selector_wizard',
'target' => \Path\To\your\class\WizardGeoSelector::class . '::WizardAction'
),
);
AjaxRoutes.php
的内容
<?php
/**
* Definitions for routes provided by EXT:backend
* Contains all AJAX-based routes for entry points
*
* Currently the "access" property is only used so no token creation + validation is made
* but will be extended further.
*/
return array('my_ajax_element' => array(
'path' => 'tx_geoselecotor/my_ajax_route',
'target' => \Path\To\your\class\MyAjaxController::class .'::myAjaxFunction'
));
如果您不确定该表示法,您可以与后端全局变量中的现有条目进行比较:
Navigate to System -> Configuration -> Backend Routes
路径的路由处理方式不同,对于Ajax它总是"ajax"前置,所以你永远不要将它添加到路径中,否则它会在路由中出现两次。对于普通路由,定义的字符串没有变化。
现在可以使用该向导了,即使它永远不必在 ext_tables.php 中定义它也必须在 configuration-area 中的任何 table-field 中被提及(模块[名称]):
'table_field_for_wizard' => array(
'label' => 'LLL:EXT:my_extension/Resources/Private/Language/locallang.xml:table_name.tx_myextension_wizard',
'config' => array (
'type' => 'user',
'userFunc' => 'Path/to/class/without/wizard->renderForm',
'wizards' => array(
'my_wizard' => array(
'type' => 'popup',
'title' => 'MyTitle',
'JSopenParams' => 'height=700,width=780,status=0,menubar=0,scrollbars=1',
'icon' => 'EXT:' . $_EXTKEY . '/Resources/Public/img/link_popup.gif',
'module' => array(
'name' => 'my_wizard_element',
'urlParameters' => array(
'mode' => 'wizard',
'ajax' => '0',
'any' => '... parameters you need'
),
),
),
'_VALIGN' => 'middle',
'_PADDING' => '4',
),
# Optional
#'softref'=>'something',
),
),
在 userFunc Path/to/class/without/wizard->renderForm
中,您必须创建一个链接到向导的按钮,然后单击 onClick 向导将使用您在 Routes.php 中定义的路由和可选的 urlParameters 打开。
目前我从未在 core-documentation 中找到完整的解释。
编辑:
有关路由的详细信息,请参见此处:Routing
渲染过程可以在这里找到:Rendering / NodeFactory
您可能还应该阅读链接段落的外部上下文。
编辑 2:
可以在此处找到一个示例扩展,有些东西永远不会 100% 有效,但向导可以正常工作。扩展适用于 TYPO3 版本 7:
https://github.com/DavidBruchmann/imagemap_wizard
当我尝试在 TCA 中添加名为 wizard_geo_selector 的向导时,出现错误 "module not registered"。请告诉我如何在 TCA 中正确注册该向导。?
IN TCA 添加如下向导:
'module' => array(
'name' => 'wizard_geo_selector',
),
在 ext_tables.php 中注册向导。
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addModulePath(
'wizard_geo_selector',
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath($_EXTKEY) . 'Modules/Wizards/Yourwizardname/'
);
请记住,自 Typo3 7 起已弃用此方法并在 Typo3 中删除 8.So 您可以在 Typo3 之前使用此方法 7.For Typo3 8 请使用下面 David 指定的方法。
Ricky 的回答不再有效,因为 addModulePath 从版本 7 开始就被弃用了。
此外,像这样注册模块仍然会出现您所说的错误。
唯一让向导继续运行的是:
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addModule('wizard','pbsurvey_answers',"",\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath($_EXTKEY).'wizard/');
但是当您添加它时,该模块会在您的 TYPO3 后端中显示为一个新点。
TYPO3 Version 7.6 中添加了如下新向导:
- 在您的扩展中创建目录
Configuration/Backend/
- 在新目录中创建一个文件
Routes.php
,它会自动找到,不需要提及in ext_localconf.php
或ext_tables.php
。如果您仍然需要 Ajax,您可以在同一文件夹中添加文件AjaxRoutes.php
。 Routes.php
的内容:return array( 'my_wizard_element' => array( 'path' => '/wizard/tx_geoselecotor/geo_selector_wizard', 'target' => \Path\To\your\class\WizardGeoSelector::class . '::WizardAction' ), );
AjaxRoutes.php
<?php
/**
* Definitions for routes provided by EXT:backend
* Contains all AJAX-based routes for entry points
*
* Currently the "access" property is only used so no token creation + validation is made
* but will be extended further.
*/
return array('my_ajax_element' => array(
'path' => 'tx_geoselecotor/my_ajax_route',
'target' => \Path\To\your\class\MyAjaxController::class .'::myAjaxFunction'
));
如果您不确定该表示法,您可以与后端全局变量中的现有条目进行比较:
Navigate to System -> Configuration -> Backend Routes
路径的路由处理方式不同,对于Ajax它总是"ajax"前置,所以你永远不要将它添加到路径中,否则它会在路由中出现两次。对于普通路由,定义的字符串没有变化。
现在可以使用该向导了,即使它永远不必在 ext_tables.php 中定义它也必须在 configuration-area 中的任何 table-field 中被提及(模块[名称]):
'table_field_for_wizard' => array( 'label' => 'LLL:EXT:my_extension/Resources/Private/Language/locallang.xml:table_name.tx_myextension_wizard', 'config' => array ( 'type' => 'user', 'userFunc' => 'Path/to/class/without/wizard->renderForm', 'wizards' => array( 'my_wizard' => array( 'type' => 'popup', 'title' => 'MyTitle', 'JSopenParams' => 'height=700,width=780,status=0,menubar=0,scrollbars=1', 'icon' => 'EXT:' . $_EXTKEY . '/Resources/Public/img/link_popup.gif', 'module' => array( 'name' => 'my_wizard_element', 'urlParameters' => array( 'mode' => 'wizard', 'ajax' => '0', 'any' => '... parameters you need' ), ), ), '_VALIGN' => 'middle', '_PADDING' => '4', ), # Optional #'softref'=>'something', ), ),
在 userFunc Path/to/class/without/wizard->renderForm
中,您必须创建一个链接到向导的按钮,然后单击 onClick 向导将使用您在 Routes.php 中定义的路由和可选的 urlParameters 打开。
目前我从未在 core-documentation 中找到完整的解释。
编辑:
有关路由的详细信息,请参见此处:Routing
渲染过程可以在这里找到:Rendering / NodeFactory 您可能还应该阅读链接段落的外部上下文。
编辑 2:
可以在此处找到一个示例扩展,有些东西永远不会 100% 有效,但向导可以正常工作。扩展适用于 TYPO3 版本 7:
https://github.com/DavidBruchmann/imagemap_wizard