Как настроить extbase для извлечения отношений inline / IRRE с tt_content? - PullRequest
0 голосов
/ 03 мая 2019

Я создал расширение, в котором я могу назначить встроенные элементы содержимого (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.

...