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

时间:2016-10-05 13:33:39

标签: database typo3 typoscript

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

所以,让我说我的后端有这个:

Value in the Backend to be stored in a different DB

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

我之所以需要这个,是因为我有另一个数据库,用于通过PHP加载到我的网站上的一些动态内容。

希望有人有个主意,可以帮助我:)。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

有几种方法可以实现这一目标。我只是假设您想在TYPO3的tt_content表和不同数据库中的某个外部表或甚至不同的存储引擎(Web服务,文件系统......)之间创建关系。

在这种情况下,您可以通过附加属性扩展TCA表的tt_content,让我们将其称为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()
            ];
        }
    }
}

为了能够保留选定的引用,您必须在tt_content

中扩展typo3conf/ext/my_extension/ext_tables.sql的SQL模式。
#
# Table structure for table 'tt_content'
#
CREATE TABLE tt_content (

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

);

通过调用TYPO3安装工具中的数据库分析器或通过(重新)在Extension Manager中安装扩展来更新数据库模式。