0

根据教程,我在 TYPO3 9.5 中创建了一个扩展,用于将另一个表中的多个元素添加到类型为“inline”(IRRE)的tt_content

我可以将新的内联元素添加到后端的内容元素,但在保存它们时,它们不会附加到 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
);

tt_content 添加 IRRE 功能的 TCA 部分:

'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,
         ],
     ],
],

以及新记录的 TCA:

<?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 创建后直接在表中更改 parentid 和 parenttable,则会显示记录。

4

1 回答 1

0

在您的问题/答案表中添加更多字段。在你的 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)
);

在您的 Configuration/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'
        ]
    ]
];

并且应该保持连接。我确实测试过。

于 2018-11-26T09:56:22.903 回答