我想创建自定义内容元素。我知道这基本上是如何工作的。但我问自己,是否有办法将这些元素的配置数据存储在一个像样的数据库表中?
我只知道扩展tt_content
表并将数据存储在那里的方法。但是,随着元素和字段数量的增加,tt_content
也将变得越来越大。我想阻止这一点。
就在您提出问题之前:我不想使用FluidTYPO3。 ;)我只想用基本的TYPO3功能来做。
答案 0 :(得分:1)
在创建内容元素时,您始终需要使用数据库表tt_content
。当然,将关系用于自定义记录是有意义的,例如如果你创建像tab,accordions,...等元素。
你能做的就是重复使用现有的列 - 如你所说 - 很多。因此,请重复使用header
,bodytext
,image
等字段,...查看/sysext/frontend/Configuration/TCA/tt_content.php
。好处是
您还可以重复使用字段及其配置,并使用overrideChildTca
覆盖它。请参阅文档中的https://docs.typo3.org/typo3cms/TCAReference/ColumnsConfig/Properties/InlineOverrideChildTCa.html?highlight=overridechildtca。
答案 1 :(得分:0)
不知道是否有更好的方法,但也许您可以创建没有字段定义但使用IRRE和min:1和max:1的元素 - 但这不是一个很好的方法。 更好的方法是尽可能频繁地重用tt_content中给出的字段,如果真的需要,只添加更多字段。 也许你应该看看EXT:mask和EXT:mask_export - 这两个是非常强大的工具来创建自定义内容元素(EXT:mask)并将它们导出为自己的扩展(EXT:mask_export)所以不需要这些生产中的两个扩展,但仅限于开发。
答案 2 :(得分:0)
我建议你看看typo3扩展程序mask。您可以创建自定义内容并将现有tt_content字段映射到新元素。重用标题,正文,媒体,图像字段是有意义的,因为后端预览将自动采用。
我最近用它,它的效果非常好! Here是一些可以跳入的资源(仅限德语)
如果您不需要在新字段上添加索引,那么用新字段炸掉tt_content并不是一个大问题。它不会对性能产生如此大的影响。
如果您需要从您的内容到某些儿童记录(手风琴,团队列表等)有新的1:N关系,只需将它们添加为inline elements(IRRE)并将该字段添加到您的{ {3}}
如果您需要一种新的数据,应该是可过滤的,可排序的等等,您应该创建一种具有自己的表结构的新记录类型,并使用extbase插件来显示该数据。
只要您只需要自定义内容,就可以扩展/重新映射tt_content。
答案 3 :(得分:0)
您可以为此使用钩子。
在您的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
亲切的问候
答案 4 :(得分:0)
此处解释了 https://learn-typo3.com/blog/news-detail/how-to-create-custom-content-elements-on-typo3,但我更喜欢扩展和重用 tt_content 字段。