如何创建TYPO3后台模块设置页面?
How to create TYPO3 back-end module settings page?
我有 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 文件中的扩展配置,并且还可以在那里更改设置。
您必须实现一个名为 Settings
的控制器,并在 PHP class 中实现一个名为 mainAction()
的方法。假设您的扩展密钥读取 my_example
,那么 PHP 命名空间应该是:
CBWebdesign\MyExample\Controller\Settings
...并且扩展中控制器文件的 file/path 显示为:
Classes/Controller/Settings.php
您还必须实施视图(例如使用Fluid)。控制器 "Settings" 和操作 "main" 的模板文件应位于:
Classes/Resources/Private/Templates/Settings/Main.html
我建议查看 TYPO3 附带的现有系统扩展的源代码(例如位于 typo3/sysext/extensionmanager/
的扩展管理器)。他们都遵循这个范式。
[基于更新问题的新答案]
您在扩展模板文件 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)以将其输出给用户(后端 and/or 前端)。
但是,不要更改您自己的扩展中的扩展配置!这不是功能或核心的目的 class ExtensionConfiguration
。此类配置只能使用 TYPO3 的安装工具(如上所示)进行维护。
查看文件 typo3/sysext/core/Classes/Configuration/ExtensionConfiguration.php
中的评论。
API to get()
instance specific extension configuration options.
[...]
Note only ->get()
is official API and other public methods are low level core internal API that is usually only used by extension manager and install tool.
另请注意,此class中的其他方法标记为@internal
。
虽然访问和处理(甚至显示)配置没有问题,但您不应在安装工具之外更改它。
根据您的具体用例,您可能要考虑使用 FlexForms to let backend users (incl. editors) configure certain aspects of an extension — or TypoScript(如果配置应仅限于管理员用户)。对于更复杂的场景,您可以创建一个专用数据库 table(或扩展现有的 table,例如 be_users
)并将配置存储在那里。
我有 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 文件中的扩展配置,并且还可以在那里更改设置。
您必须实现一个名为 Settings
的控制器,并在 PHP class 中实现一个名为 mainAction()
的方法。假设您的扩展密钥读取 my_example
,那么 PHP 命名空间应该是:
CBWebdesign\MyExample\Controller\Settings
...并且扩展中控制器文件的 file/path 显示为:
Classes/Controller/Settings.php
您还必须实施视图(例如使用Fluid)。控制器 "Settings" 和操作 "main" 的模板文件应位于:
Classes/Resources/Private/Templates/Settings/Main.html
我建议查看 TYPO3 附带的现有系统扩展的源代码(例如位于 typo3/sysext/extensionmanager/
的扩展管理器)。他们都遵循这个范式。
[基于更新问题的新答案]
您在扩展模板文件 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)以将其输出给用户(后端 and/or 前端)。
但是,不要更改您自己的扩展中的扩展配置!这不是功能或核心的目的 class ExtensionConfiguration
。此类配置只能使用 TYPO3 的安装工具(如上所示)进行维护。
查看文件 typo3/sysext/core/Classes/Configuration/ExtensionConfiguration.php
中的评论。
API to
get()
instance specific extension configuration options. [...]Note only
->get()
is official API and other public methods are low level core internal API that is usually only used by extension manager and install tool.
另请注意,此class中的其他方法标记为@internal
。
虽然访问和处理(甚至显示)配置没有问题,但您不应在安装工具之外更改它。
根据您的具体用例,您可能要考虑使用 FlexForms to let backend users (incl. editors) configure certain aspects of an extension — or TypoScript(如果配置应仅限于管理员用户)。对于更复杂的场景,您可以创建一个专用数据库 table(或扩展现有的 table,例如 be_users
)并将配置存储在那里。