【问题标题】:How to create TYPO3 back-end module settings page?如何创建 TYPO3 后端模块设置页面?
【发布时间】:2019-09-29 06:56:12
【问题描述】:

我有TYPO3 9.5.9 版本并使用以下函数添加了一个后端模块:

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerModule(
    'CBWebdesign.' . $_EXTKEY,
    'tools', // Make module a submodule of 'admin'
    'tools', // Submodule key
    'top', // Position
    array(
        'Settings' => 'main',
    ),
    array(
        'access' => 'admin',
        'icon' => 'EXT:' . $_EXTKEY . '/Resources/Public/icons/template/tx_ext_cbwebdesigntemplate.gif',
        'labels' => 'LLL:EXT:' . $_EXTKEY . '/Resources/Private/Language/locallang_cbwebdesigntemplate.xlf',
    )
);

新的后端模块出现在ADMIN TOOLS下的菜单中。但是,下一步我需要做什么才能看到包含模块设置字段的页面?我还需要保存它们并在前端使用。

抱歉,我必须指定我的用例。我需要实现我的设置页面。我的意思是我已将模块项添加到菜单中。但是在那里实施设置的最佳方法是什么?甚至可以确切地说我想从 ext_conf_template 文件中显示我的扩展配置,并且还可以在那里更改设置。

【问题讨论】:

    标签: php typo3 typo3-9.x


    【解决方案1】:

    [基于更新问题的新答案]

    您在扩展的模板文件ext_conf_template.txt 中指定的TYPO3 扩展配置存储在TYPO3 的系统范围配置typo3conf/LocalConfiguration.php 中。这些配置旨在由 TYPO3 核心管理并由仅具有管理权限的后端用户编辑。

    您可以在 TYPO3 版本 9.5.x 中的 ADMIN TOOLS ➜ Settings ➜ Extension Configuration 下找到更改这些设置的功能,如下图所示:

    您可以使用 TYPO3 的 API 在您的扩展程序(例如在您的控制器中)中轻松访问这些设置。例如,访问扩展配置的值foo

    use \TYPO3\CMS\Core\Configuration\ExtensionConfiguration;
    use \TYPO3\CMS\Core\Utility\GeneralUtility;
    ...
    $extensionKey = 'my_example';
    $foo = GeneralUtility::makeInstance(ExtensionConfiguration::class)
      ->get($extensionKey, 'foo');
    

    然后您可以将变量 $foo 传递给视图(例如 Fluid)以将其输出给用户(后端和/或前端)。

    但是,不要在您自己的扩展程序中更改扩展程序配置!这不是函数或核心类ExtensionConfiguration 的目的。此类配置只能使用 TYPO3 的安装工具(如上所示)进行维护。

    查看文件typo3/sysext/core/Classes/Configuration/ExtensionConfiguration.php中的cmets。

    get() 实例特定扩展配置选项的 API。 [...]

    注意->get()是官方API,其他公共方法是底层核心内部API,通常只供扩展管理器和安装工具使用。

    另请注意,该类中的其他方法标记为@internal

    虽然访问和处理(甚至显示)配置不是问题,但您不应在安装工具之外更改它。

    根据您的具体用例,您可能要考虑使用 FlexForms 让后端用户(包括编辑器)配置扩展的某些方面 - 或 TypoScript(如果配置应限制为管理员用户)。对于更复杂的场景,您可以创建一个专用的数据库表(或扩展现有表,例如 be_users)并将配置存储在那里。

    【讨论】:

      【解决方案2】:

      您必须实现一个名为Settings 的控制器,并在PHP 类中实现一个名为mainAction() 的方法。假设您的扩展密钥为my_example,那么 PHP 命名空间应该是:

      • CBWebdesign\MyExample\Controller\Settings

      ...扩展中控制器文件的文件/路径为:

      • Classes/Controller/Settings.php

      您还必须实现视图(例如使用Fluid)。控制器“设置”和操作“主”的模板文件应位于:

      • Classes/Resources/Private/Templates/Settings/Main.html

      我建议查看 TYPO3 附带的现有系统扩展的源代码(例如扩展管理器,位于typo3/sysext/extensionmanager/)。他们都遵循这个范式。

      【讨论】:

      • 感谢您的回答!我更新了我的问题,我指定了我的用例
      猜你喜欢
      • 2016-06-01
      • 2011-11-28
      • 1970-01-01
      • 2014-06-10
      • 1970-01-01
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多