TYPO3 在另一个数据库中保存后端内容

TYPO3 saving Backend content in another database

我想将我后端的内容存储在另一个数据库中。

假设我的后端有这个:

如何将值(例如图片中的浮点值)保存到另一个数据库中?

我需要这个的原因是,因为我有另一个数据库,用于通过 PHP.

加载到我的网站上的一些动态内容

希望有人有想法可以帮助我:)

我会使用一个钩子来更新外部数据库的值,如果 TYPO3 后端发生了某些变化就会触发这个值,或者我会使用一个由 CLI 触发并运行所有 x 分钟的调度程序任务/命令控制器并更改数据库中的值。

有几种方法可以实现。我只是假设你想在 TYPO3 的 tt_content table 和不同数据库甚至不同存储引擎(网络服务,文件系统,. ..).

在那种情况下,您可以将 tt_content table 的 TCA 扩展一个额外的 属性,我们称它为 external_reference。然后后端表单应该提供一个额外的选择器字段,允许选择外部数据源的实体。

以下示例假设您的扩展键名为my_extension,当然这必须根据实际命名进行调整。

您可以通过将以下配置放入文件夹 typo3conf/ext/my_extension/Configuration/TCA/Overrides/tt_content.php:

中的扩展来实现
<?php
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns(
    'tt_content',
    [
        'external_reference' => [
            'exclude' => 1,
            'label' => 'External Source',
            'config' => [
                'type' => 'select',
                'items' => [
                    ['-- none --', 0]
                ],
                'itemsProcFunc' => ExternalReferenceSelection::class . '->render',
                'default' => 0,
            ]
        ],
    ]
);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes(
    'tt_content',
    'external_reference'
);

然后你必须实现选择器和从外部源检索,例如

<?php
class ExternalReferenceSelection
{
    public function render(array $parameters)
    {
        $references = ExternalReferenceRepository::instance()->findAll();
        foreach ($references as $reference) {
            $parameters['items'][] = [
                $reference->getTitle(),
                $reference->getIdentifier()
            ];
        }
    }
}

为了能够保留选定的引用,您必须在 typo3conf/ext/my_extension/ext_tables.sql

中扩展 tt_content 的 SQL 架构
#
# Table structure for table 'tt_content'
#
CREATE TABLE tt_content (

    external_reference int(11) unsigned DEFAULT '0' NOT NULL

);

通过调用 TYPO3 安装工具中的数据库分析器或通过(重新)安装扩展管理器中的扩展来更新数据库架构。