我构建了一个扩展,可以在其中将内容元素(tt_content)内联(IRRE)分配给TYPO3后端中的条目。 但是我不知道如何解决关系,以便可以在前端显示分配的内容元素。
我已经在TYPO3 9.5.5中使用“扩展构建器”创建了扩展。 我创建了一个模型对象“内容”,并在“域对象设置”中选择了“映射到现有表”,然后选择了“ tt_content”。 在我的模型“ ProductTab”中,将名称为“ content”的“ Inline(IRRE)”类型的1:n关系配置为“ Content”模型。
如果我在后端的模型项中添加内容元素,则其工作原理将与预期的一样。数据库中的关系字段已正确映射。通过“ Extbase变量转储”,我可以看到我所有的关系都传递给了前端插件,但是我的“内容”关系是一个空的“ ObjectStorage”。
我缺少什么以便extbase持久性获取我的内容关系?
CREATE TABLE tx_myext_domain_model_producttab (
product int(11) unsigned DEFAULT '0' NOT NULL,
title varchar(255) DEFAULT '' NOT NULL,
content int(11) unsigned DEFAULT '0' NOT NULL,
);
CREATE TABLE tt_content (
producttab int(11) unsigned DEFAULT '0' NOT NULL,
);
'content' => [
'exclude' => false,
'label' => 'producttab.content',
'config' => [
'type' => 'inline',
'foreign_table' => 'tt_content',
'foreign_field' => 'producttab',
'maxitems' => 9999,
'appearance' => [
'collapseAll' => 0,
'levelLinksPosition' => 'top',
'showSynchronizationLink' => 1,
'showPossibleLocalizationRecords' => 1,
'showAllLocalizationLink' => 1
],
],
],
由于我可以在后端中添加和编辑内容元素,因此我认为DB和TCA关系很好。 但是仍然缺少一些东西,因此获取了该关系并将其提供给FE模板,以便我可以使用ViewHelper显示分配的内容元素。
class ProductTab extends \TYPO3\CMS\Extbase\DomainObject\AbstractValueObject
{
protected $content = null;
protected function initStorageObjects()
{
$this->content = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
}
public function addContent(\MyExt\Domain\Model\Content $content)
{
$this->content->attach($content);
}
public function removeContent(\MyExt\Domain\Model\Content $contentToRemove)
{
$this->content->detach($contentToRemove);
}
public function getContent()
{
return $this->content;
}
public function setContent(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $content)
{
$this->content = $content;
}
}
在屏幕截图上,您可以看到提取的产品(在这种情况下为一件)和producttabs(也是1件)。分配了一个内容元素,但uid = 1的ProductTab的属性内容为空。
由于我仍然无法解决此问题,因此我创建了一个带有Extension Builder
的简约扩展以演示该问题:https://github.com/apiening/demo_irrecontent
该扩展名是我可以创建的最简单的扩展名,其中一个模型仅包含一个属性以及与tt_content
的关系。它具有插件list
,该插件还显示调试输出。
我已经在GitHub项目的README.md
中添加了更多详细信息。