Расширение tt_content с помощью встроенного элемента, элемент не прикреплен

Я создал расширение в TYPO3 9.5 для добавления нескольких элементов из другой таблицы в tt_content с типом "inline" (IRRE) в соответствии с руководством.

Я могу добавить новые встроенные элементы к элементу содержимого в бэкенде, но, поскольку я их сохраняю, они не присоединяются к элементу tt_content. Но я могу видеть их как записи в виде списка. Отсутствует только связь между двумя элементами.

Определение дополнительного поля для tt_content:

CREATE TABLE tt_content (
    tx_jrinterview_question_answer int(11) DEFAULT '0' NOT NULL
);

Определение новой таблицы записей:

CREATE TABLE tx_jrinterview_question_answer (
    parentid  int(11) DEFAULT '0' NOT NULL,
    parenttable varchar(255) DEFAULT '' NOT NULL,
    question varchar(255) DEFAULT '' NOT NULL,
    answer text
);

Часть TCA для tt_content для добавления функциональности IRRE:

'tx_jrinterview_question_answer' => [
    'exclude' => true,
        'label' => 'Questions and Answers',
        'config' => [
             'type' => 'inline',
             'allowed' => 'tx_jrinterview_question_answer',
             'foreign_table' => 'tx_jrinterview_question_answer',
             'foreign_field' => 'parentid',
             'foreign_table_field' => 'parenttable',
             'minitems' => 0,
             'maxitems' => 99,
         ],
     ],
],

И ТСА для новой записи:

<?php
return [
    'ctrl' => [
        'title' => 'Question and answer',
        'label' => 'question',
        'tstamp' => 'tstamp',
        'crdate' => 'crdate',
        'cruser_id' => 'cruser_id',
        'versioningWS' => true,
        'languageField' => 'sys_language_uid',
        'transOrigPointerField' => 'l10n_parent',
        'transOrigDiffSourceField' => 'l10n_diffsource',
        'delete' => 'deleted',
        'enablecolumns' => [
            'disabled' => 'hidden',
            'starttime' => 'starttime',
            'endtime' => 'endtime',
        ],
        'searchFields' => 'question,answer',
    ],
    'interface' => [
        'showRecordFieldList' => 'parentid,parenttable,sys_language_uid, l10n_parent, l10n_diffsource, hidden, question, answer',
    ],
    'types' => [
        '0' => ['showitem' => 'parentid, parenttable, sys_language_uid, l10n_parent, l10n_diffsource, hidden, question, answer, --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime'],
    ],
    'columns' => [
        'pid' => [
            'label' => 'Pid',
            'config' => [
                'type' => 'passthrough'
            ]
        ],
        'crdate' => [
            'label' => 'Crdate',
            'config' => [
                'type' => 'passthrough',
            ]
        ],
        'tstamp' => [
            'label' => 'Tstamp',
            'config' => [
                'type' => 'passthrough',
            ]
        ],
        'sys_language_uid' => [
            'exclude' => true,
            'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language',
            'config' => [
                'type' => 'select',
                'renderType' => 'selectSingle',
                'special' => 'languages',
                'items' => [
                    [
                        'LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages',
                        -1,
                        'flags-multiple'
                    ]
                ],
                'default' => 0,
            ],
        ],
        'l10n_parent' => [
            'displayCond' => 'FIELD:sys_language_uid:>:0',
            'exclude' => true,
            'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent',
            'config' => [
                'type' => 'select',
                'renderType' => 'selectSingle',
                'default' => 0,
                'items' => [
                    ['', 0],
                ],
                'foreign_table' => 'tx_jrinterview_question_answer',
                'foreign_table_where' => 'AND tx_jrinterview_question_answer.pid=###CURRENT_PID### AND tx_jrinterview_question_answer.sys_language_uid IN (-1,0)',
            ],
        ],
        'l10n_diffsource' => [
            'config' => [
                'type' => 'passthrough',
            ],
        ],
        't3ver_label' => [
            'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel',
            'config' => [
                'type' => 'input',
                'size' => 30,
                'max' => 255,
            ],
        ],
        'hidden' => [
            'exclude' => true,
            'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden',
            'config' => [
                'type' => 'check',
                'items' => [
                    '1' => [
                        '0' => 'LLL:EXT:lang/locallang_core.xlf:labels.enabled'
                    ]
                ],
            ],
        ],
        'starttime' => [
            'exclude' => true,
            'behaviour' => [
                'allowLanguageSynchronization' => true
            ],
            'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.starttime',
            'config' => [
                'type' => 'input',
                'renderType' => 'inputDateTime',
                'size' => 13,
                'eval' => 'datetime',
                'default' => 0,
            ],
        ],
        'endtime' => [
            'exclude' => true,
            'behaviour' => [
                'allowLanguageSynchronization' => true
            ],
            'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.endtime',
            'config' => [
                'type' => 'input',
                'renderType' => 'inputDateTime',
                'size' => 13,
                'eval' => 'datetime',
                'default' => 0,
                'range' => [
                    'upper' => mktime(0, 0, 0, 1, 1, 2038)
                ],
            ],
        ],

        'parentid' => [
            'exclude' => true,
            'label' => 'parentid',
            'config' => [
                'type' => 'passthrough',
            ],
        ],
        'parenttable' => [
            'exclude' => true,
            'label' => 'parenttable',
            'config' => [
                'type' => 'passthrough',
            ],
        ],
        'question' => [
            'exclude' => true,
            'label' => 'question',
            'config' => [
                'type' => 'input',
                'size' => 30,
                'eval' => 'trim'
            ],
        ],
        'answer' => [
            'exclude' => true,
            'label' => 'answer',
            'config' => [
                'type' => 'text',
                'cols' => 40,
                'rows' => 15,
                'eval' => 'trim'
            ]
        ],

    ],
];

Возможно, это должно быть что-то с языком? Если я изменю в таблице непосредственно парентид и родительскую таблицу после создания ее через IRRE, запись будет показана.

1 ответ

Добавьте больше полей в таблицу вопросов / ответов. В вашем ext_tables.sql

CREATE TABLE tx_jrinterview_question_answer (
    uid int(11) NOT NULL auto_increment,
    pid int(11) DEFAULT '0' NOT NULL,
    tstamp int(11) DEFAULT '0' NOT NULL,
    crdate int(11) DEFAULT '0' NOT NULL,
    cruser_id int(11) DEFAULT '0' NOT NULL,
    deleted tinyint(4) DEFAULT '0' NOT NULL,
    hidden tinyint(4) DEFAULT '0' NOT NULL,

    parentid  int(11) DEFAULT '0' NOT NULL,
    parenttable varchar(255) DEFAULT '' NOT NULL,
    question varchar(255) DEFAULT '' NOT NULL,
    answer text,

    PRIMARY KEY (uid),
    KEY parent (pid)
);

В вашей конфигурации /TCA/tx_jrinterview_question_answer.php

<?php
defined('TYPO3_MODE') or die();

return [
    'ctrl' => [
        'title' => 'tx_jrinterview_question_answer',
        'label' => 'question',
        'tstamp' => 'tstamp',
        'crdate' => 'crdate',
        'cruser_id' => 'cruser_id',
        'delete' => 'deleted',
        'enablecolumns' => [
            'disabled' => 'hidden',
        ],
    ],
    'interface' => [
        'showRecordFieldList' => 'parentid,parenttable,question,answer'
    ],
    'columns' => [
        'pid' => [
            'label' => 'Pid',
            'config' => [
                'type' => 'passthrough'
            ]
        ],
        'crdate' => [
            'label' => 'Crdate',
            'config' => [
                'type' => 'passthrough',
            ]
        ],
        'tstamp' => [
            'label' => 'Tstamp',
            'config' => [
                'type' => 'passthrough',
            ]
        ],
        'hidden' => [
            'exclude' => true,
            'label' => 'Hidden',
            'config' => [
                'type' => 'check',
                'default' => 0
            ]
        ],
        'parentid' => [
            'exclude' => true,
            'label' => 'Parentid',
            'config' => [
                'type' => 'passthrough',
            ],
        ],
        'parenttable' => [
            'exclude' => true,
            'label' => 'Parenttable',
            'config' => [
                'type' => 'passthrough',
            ],
        ],
        'question' => [
            'exclude' => true,
            'label' => 'Question',
            'config' => [
                'type' => 'input',
                'size' => 30,
                'eval' => 'trim'
            ],
        ],
        'answer' => [
            'exclude' => true,
            'label' => 'Answer',
            'config' => [
                'type' => 'text',
                'cols' => 40,
                'rows' => 15,
                'eval' => 'trim'
            ]
        ],
    ],
    'types' => [
        0 => [
            'showitem' => 'parentid,parenttable,question,answer'
        ]
    ]
];

И связь должна быть сохранена. Я проверил это.

Другие вопросы по тегам