4

当我尝试在 TCA 中添加名为 wizard_geo_selector 的向导时,出现“模块未注册”错误。请告诉我如何在 TCA 中正确注册向导。?

4

3 回答 3

6

在 TYPO3 7.6 版中,新向导添加如下:

  1. 在您的扩展程序中创建目录Configuration/Backend/
  2. 在新目录下创建一个文件Routes.php,它会自动找到,无需in ext_localconf.php赘述ext_tables.php。如果您仍然需要 Ajax,您可以将文件添加AjaxRoutes.php到同一文件夹中。
  3. 内容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'
 ));

如果您不确定该表示法,您可以将其与后端全局变量中的现有条目进行比较:

导航到系统 -> 配置 -> 后端路由

路径的路由处理方式不同,对于 Ajax,它总是预先添加“ajax”,所以你永远不会将它添加到路径中,否则它会在路径中出现两次。对于公共路由,定义的字符串没有变化。

  1. 现在可以使用该向导,甚至不必在 ext_tables.php 中定义它,也必须从配置区域(模块 [名称])的任何表字段中提及它:

    '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。

目前我从未在核心文档中找到解释过的整个项目。

编辑:
有关路由的详细信息可以在这里找到:路由

渲染过程可以在这里找到:Rendering / NodeFactory 您可能还应该阅读链接段落的外部上下文。

编辑 2:
可以在这里找到一个示例扩展,有些事情永远不会 100% 工作,但向导正在工作。该扩展适用于 TYPO3 版本 7:
https ://github.com/DavidBruchmann/imagemap_wizard

于 2017-01-30T08:32:06.787 回答
4

在 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 中将其删除。因此,您可以在 Typo3 7 之前使用此方法。对于 Typo3 8,请使用下面David指定的方法。

于 2016-06-29T12:53:52.407 回答
1

Ricky 的答案不再有效,因为 addModulePath 自版本 7 以来已弃用。

另外,像这样注册模块仍然会给你说的错误。

唯一能让向导再次运行的是:

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addModule('wizard','pbsurvey_answers',"",\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath($_EXTKEY).'wizard/');

但是当您添加它时,该模块会在您的 TYPO3 后端中显示为一个新点。

于 2016-11-14T15:48:02.500 回答