Я создал расширение, в котором я могу назначить встроенные элементы содержимого (tt_content) (IRRE) для своих записей в TYPO3 Backend.Но я не могу понять, как я могу разрешить отношения так, чтобы я мог отобразить назначенные элементы контента во внешнем интерфейсе.
Я создал расширение с помощью 'Builder Extension' в TYPO3 9.5.5.Я создал объект модели «Содержимое» и выбрал «Сопоставить с существующей таблицей» в «Настройках объекта домена» и выбрал «tt_content».В моей модели ProductTab я сконфигурировал отношение 1: n типа «Inline (IRRE)» с именем «content» к моей модели «Content».
Если я добавлю элементы содержимого в записи модели вБэкэнд, он работает как ожидалось.Реляционные поля в БД отображаются правильно.С помощью 'Extbase Variable Dump' я вижу, что все мои отношения передаются внешнему плагину, но мое отношение 'content' является пустым 'ObjectStorage'.
Чего мне не хватает, так что постоянство extbaseизвлекает мои отношения с содержимым?
ext_tables.sql выдержки
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,
);
выдержки TCA
'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
],
],
],
Поскольку я могу добавлять и редактировать элементы содержимого в BackendЯ думаю, что отношения БД и TCA в порядке.Но чего-то по-прежнему не хватает, так что отношение извлекается и предоставляется шаблону FE, чтобы я мог отображать назначенные элементы содержимого с помощью ViewHelper.
ProductTab.php выдержки
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;
}
}
Переменная Extbase Dump
Снимок экрана вывода отладочной информации
На снимке экрана вы видите выбранные продукты (в данном случае один элемент) и вкладки продуктов (также 1 элемент).Назначен один элемент содержимого, но содержимое свойства ProductTab с uid = 1. пусто.
Обновление
Поскольку я до сих пор не могу решить эту проблему, я создалминималистическое расширение с Extension Builder
для демонстрации проблемы: https://github.com/apiening/demo_irrecontent
Расширение является самым простым, которое я могу создать, если одна модель содержит только одно свойство и отношение к tt_content
.Он имеет плагин list
, который также показывает выходные данные отладки.Я добавил еще несколько деталей в README.md
проекта GitHub.