[英]TYPO3 saving Backend content in another database
我将使用一个挂钩来更新外部数据库,该挂钩使用如果TYPO3后端中发生的更改触发的值来更新外部数据库,或者我使用一个由CLI触发并运行所有x分钟并更改其中值的调度程序任务/命令控制器。数据库。
有几种方法可以实现这一目标。 我只是假设您要在TYPO3的tt_content
表和不同数据库甚至不同存储引擎(Web服务,文件系统等)中的某些外部表之间创建关系。
在这种情况下,您可以通过附加属性扩展tt_content
表的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()
];
}
}
}
为了能够保留选定的引用,您还必须在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安装工具中的数据库分析器,或通过在扩展管理器中(重新)安装扩展,可以更新数据库模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.