TYPO3 V10 - EXT:news 自定义类型和持久性映射
Posted
技术标签:
【中文标题】TYPO3 V10 - EXT:news 自定义类型和持久性映射【英文标题】:TYPO3 V10 - EXT:news custom type and persistence mapping 【发布时间】:2020-10-12 01:27:36 【问题描述】:我正在尝试升级 TYPO3 10.4 的扩展,该扩展将自定义类型添加到 tx_news (Doc)。
我根据这个例子做了迁移:Breaking: #87623
类/控制器/NewsController.php
return [
\Xyz\Extendnews\Domain\Model\Team::class => [
'tableName' => 'tx_news_domain_model_news',
'recordType' => 3,
],
但是我调试 Fluid-Template 中的条目时仍然使用默认模型。
我是否遗漏了什么或有人有一个可行的例子。
感谢您的帮助。
更新: 我想创建一个新类型,在 Georg Ringer 的 manual 中解释过
我创建了一个小扩展,TYPO3 9.5 一切正常,但 TYPO3 10.4 不行。 DEMO EXT
TYPO3 10.4 的原型不是 MxnTeam\Domain\Model\Team
2020 年 6 月 29 日更新:
来自 TYPO3 Slack 频道 (post) 的 tobenschmidt 帮助我。
return [
\Mexan\MxnTeam\Domain\Model\Team::class => [
'tableName' => 'tx_news_domain_model_news',
'recordType' => \Mexan\MxnTeam\Domain\Model\Team::class,
],
\Mexan\MxnTeam\Domain\Model\Client::class => [
'tableName' => 'tx_news_domain_model_news',
'recordType' => \Mexan\MxnTeam\Domain\Model\Client::class,
],
\GeorgRinger\News\Domain\Model\News::class => [
'tableName' => 'tx_news_domain_model_news',
//'recordType' => 0,
'subclasses' => [
\Mexan\MxnTeam\Domain\Model\Team::class,
\Mexan\MxnTeam\Domain\Model\Client::class,
]
],
];
即使使用 2 种自定义类型,它也可以正常工作。
但不幸的是,不再加载默认新闻
但是如果我添加recordType => 0
,那么只有普通新闻和我的自定义类型可见,而不是类型1和2(内部和外部)
我更新了扩展: mxn_team
有没有办法防止这种情况发生?
【问题讨论】:
recordType 只是新闻表中用于过滤记录的一行。共享相同新闻记录的所有扩展都应使用相同的记录类型字符串。也许您必须手动更新数据库表以符合此要求。 【参考方案1】:这对我有用...
按照https://docs.typo3.org/p/georgringer/news/8.5/en-us/DeveloperManual/ExtendNews/AddCustomType/Index.html 中的描述实现您的新闻类型
但不是描述的 TypoScript,而是将以下文件添加到您的扩展中:
ext_name/Configuration/Extbase/Persistence/Classes.php
<?php
return [
\GeorgRinger\News\Domain\Model\News::class => [
'subclasses' => [
3 => \Vendor\ExtName\Domain\Model\MyCustomNewsType::class
]
],
Vendor\ExtName\Domain\Model\MyCustomNewsType::class => [
'tableName' => 'tx_news_domain_model_news',
'recordType' => 3,
],
];
TYPO3 v10 中移除了使用 TypoScript (config.tx_extbase.persistence.classes) 的方式
【讨论】:
我认为示例“更新 29.06.2020”的问题是缺少类型编号。'subclasses' => [ 3 => \Mexan\MxnTeam\Domain\Model\Team::class, 4 => \Mexan\MxnTeam\Domain\Model\Client::class, ]
【参考方案2】:
你写“Classes/Controller/NewsController.php”但是你必须在这里创建一个文件
extendnews/Configuration/Extbase/Persistence/Classes.php
并把你的代码放在那里。之后,不要忘记清除所有缓存。 完整的文件“Classes.php”应该是这样的
<?php
declare(strict_types = 1);
return [
\Xyz\Extendnews\Domain\Model\Team::class => [
'tableName' => 'tx_news_domain_model_news',
'recordType' => \Xyz\Extendnews\Domain\Model\Team::class,
],
要使用新模型,请遵循 Georg Ringer 的手册 manual on typo3.org
还有一个工作示例here
【讨论】:
感谢您的帮助,我不想扩展新闻,我想创建一个新类型,在 Georg Ringer 的 [手册][1] 中解释了我创建了一个小扩展,TYPO3 9.5 一切正常,但 TYPO3 10.4 不行。 [DEMO EXT][2] 使用 TYPO3 10.4,原型不是 MxnTeam\Domain\Model\Team [1]:docs.typo3.org/p/georgringer/news/8.3/en-us/DeveloperManual/… [2]:github.com/Megafry/mxn_team以上是关于TYPO3 V10 - EXT:news 自定义类型和持久性映射的主要内容,如果未能解决你的问题,请参考以下文章
TYPO3 v10 routeEnhancer 生成 slug 但无法解决
如何在typo3 V10的extbase控制器中重定向到404页面