如何在typo3 7 TCA中添加自定义向导?

时间:2016-06-29 12:44:18

标签: typo3 typo3-7.x

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

3 个答案:

答案 0 :(得分:6)

在TYPO3版本7.6中添加了这样的新向导:

  1. 在您的扩展程序中创建目录Configuration/Backend/
  2. 在新目录中创建一个文件Routes.php,它会自动找到,不需要提及in ext_localconf.phpext_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'
        ),
    );
    
  4. 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'
     ));
    

    如果您不确定符号,可以与后端的全局变量中的现有条目进行比较:

      

    导航至系统 - &gt;配置 - &gt;后端路线

    路径的路径处理不同,对于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',
          ),
      ),
      
    2. 在userFunc Path/to/class/without/wizard->renderForm中,您需要创建一个链接到向导的按钮,然后单击向导将打开您在Routes.php和可选urlParameters中定义的路径。

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

      修改
      有关路由的详细信息,请访问:Routing

      可以在此处找到呈现过程:Rendering / NodeFactory 您可能还应该阅读链接段落的外部上下文。

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

答案 1 :(得分: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指定的方法。

答案 2 :(得分:1)

Ricky的答案不再适用,因为自版本7以来不推荐使用addModulePath。

此外,只需注册这样的模块仍然会给你说错误。

让巫师再次出现的唯一原因是:

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

但是当你添加它时,模块在TYPO3后端显示为一个新点。