我想创建自定义内容元素。我知道这基本上是如何工作的。但是我问自己,是否有办法将这些元素的配置数据存储在一个像样的数据库表中?
我只知道扩展tt_content
表并将数据存储在那里的方法。但是随着元素和字段的数量越来越多,它tt_content
也会变得越来越大。我想防止这种情况。
就在你问之前:我不想使用 FluidTYPO3。;) 我只是想用基本的 TYPO3 功能来做。
我想创建自定义内容元素。我知道这基本上是如何工作的。但是我问自己,是否有办法将这些元素的配置数据存储在一个像样的数据库表中?
我只知道扩展tt_content
表并将数据存储在那里的方法。但是随着元素和字段的数量越来越多,它tt_content
也会变得越来越大。我想防止这种情况。
就在你问之前:我不想使用 FluidTYPO3。;) 我只是想用基本的 TYPO3 功能来做。
当您创建内容元素时,您将始终需要使用数据库表tt_content
。当然,使用与自定义记录的关系是有意义的,例如,如果您创建选项卡、手风琴等元素...
你可以做的是重用现有的列——正如你所说的——很多。所以重用字段,如header
, bodytext
, image
, ... 看看/sysext/frontend/Configuration/TCA/tt_content.php
. 好处是
您还可以重用字段及其配置并使用overrideChildTca
. 请参阅文档中的https://docs.typo3.org/typo3cms/TCAReference/ColumnsConfig/Properties/InlineOverrideChildTCa.html?highlight=overridechildtca。
我建议你看一下typo3 extension mask。您可以创建自定义内容并将现有 tt_content 字段映射到新元素。重用 header、bodytext、media、image 字段是有意义的,因为后端预览会自动采用。
我最近使用它,它真的很好用!这是一些可以加入的资源(仅限德语)
如果您不需要在新字段上建立索引,那么用新字段炸毁 tt_content 并不是什么大问题。它不会对性能产生太大影响。
如果您需要将内容与某些子记录(手风琴、团队列表等)建立新的 1:N 关系,只需将它们添加为内联元素(IRRE) 并将字段添加到您的types-string。
如果你需要一种新的数据,它应该是可过滤的、可排序的等等,你应该创建一种具有自己的表结构的新类型的记录,并使用 extbase 插件来显示该数据。
只要您只需要自定义内容,就可以扩展/重新映射 tt_content。
不知道是否有更好的方法,但也许您可以创建没有字段定义但使用 IRRE 和 min:1 和 max:1 的元素 - 但这并不是一个很好的方法。更好的方法是尽可能多地重用 tt_content 中给出的字段,并且仅在确实需要时添加更多字段。也许您应该看看 EXT:mask 和 EXT:mask_export - 这两个是创建自定义内容元素 (EXT:mask) 并将它们导出为自己的扩展 (EXT:mask_export) 的非常强大的工具,因此不需要这些生产中的两个扩展,但仅在开发中。
这里解释了https://learn-typo3.com/blog/news-detail/how-to-create-custom-content-elements-on-typo3,但是我更喜欢扩展和重用 tt_content 字段。
您可以为此使用钩子。
在您的 ext_localconf.php 中:
$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = \Namespace\Hooks\Classname::class;
在类/钩子/类名中:
<?php
namespace Namespace\Hooks;
use TYPO3\CMS\Core\SingletonInterface;
use TYPO3\CMS\Core\DataHandling\DataHandler;
class Classname implements SingletonInterface {
public function processDatamap_beforeStart(&$dataHandler) {
$datamap = &$dataHandler->datamap;
}
}
在这里,您必须根据需要修改 $datamap。文档在这里:https ://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/Typo3CoreEngine/Database/Index.html
亲切的问候