如何在TYPO3中使用type = inline创建重复字段?

问题描述

在TYPO3中,我想制作一个允许用户在其中创建多个子块的元素。 例如:

Create New +
|
|- Sub Block
|  |- Assets
|  |- Text Field
|
|- Sub Block
|  |- Assets
|  |- Text Field

据我了解,这是使用type='inline'

完成的

但是,文档假设您知道该过程的所有先前步骤,并且我还没有找到有关此类元素的教程。

解决方法

您可以使用扩展名maskmask_export为您的内容元素生成扩展名。

它们使用mySQL和PHP中的所有代码(包括TCA,getter / setter等)为您处理从表增强到表声明的所有事情。


如果您想自己做,请查看文档:

  1. How to define own content elements
  2. How to define TCA inline elments
,

要添加与新记录(不是内容元素)具有1:n关系的新内容元素,您必须添加新记录和tt_content的新属性,该属性描述tt_content与记录之间的关系。

  1. 为您的新记录添加新表
  2. 添加TCA作为新记录
  3. 允许在默认页面中添加记录
  4. 扩展表tt_content
  5. 为您的新内容元素添加TCA

作为一个基本示例,我创建一个新记录“ my_list_item”和一个新内容元素“ my_list”:

为您的新记录添加新表(ext_tables.sql):

CREATE TABLE tx_myext_domain_model_mylistitem (

    parent_uid int(11) DEFAULT '0' NOT NULL,parent_table varchar(255) DEFAULT '' NOT NULL,title varchar(255) DEFAULT '' NOT NULL

);

在TCA中描述新记录(Configuration / TCA / tx_myext_domain_model_mylistitem.php

<?php
return [
    'ctrl' => [
        'title' => 'Label','label' => 'title','tstamp' => 'tstamp','crdate' => 'crdate','cruser_id' => 'cruser_id','sortby' => 'sorting','versioningWS' => true,'languageField' => 'sys_language_uid','transOrigPointerField' => 'l10n_parent','transOrigDiffSourceField' => 'l10n_diffsource','delete' => 'deleted','hideTable' => true,'enablecolumns' => [
            'disabled' => 'hidden',],'searchFields' => 'title','interface' => [
        'showRecordFieldList' => 'sys_language_uid,l10n_parent,l10n_diffsource,hidden,title','columns' => [
        'sys_language_uid' => [
            'exclude' => true,'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language','config' => [
                'type' => 'select','renderType' => 'selectSingle','special' => 'languages','items' => [
                    [
                        'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.allLanguages',-1,'flags-multiple'
                    ]
                ],'default' => 0,'l10n_parent' => [
            'displayCond' => 'FIELD:sys_language_uid:>:0','label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent','items' => [
                    ['',0],'foreign_table' => 'tx_myext_domain_model_mylistitem','foreign_table_where' => 'AND {#tx_myext_domain_model_mylistitem}.{#pid}=###CURRENT_PID### AND {#tx_myext_domain_model_mylistitem}.{#sys_language_uid} IN (-1,0)','l10n_diffsource' => [
            'config' => [
                'type' => 'passthrough','t3ver_label' => [
            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.versionLabel','config' => [
                'type' => 'input','size' => 30,'max' => 255,'hidden' => [
            'exclude' => true,'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.visible','config' => [
                'type' => 'check','renderType' => 'checkboxToggle','items' => [
                    [
                        0 => '',1 => '','invertStateDisplay' => true
                    ]
                ],'title' => [
            'exclude' => true,'label' => 'Your header label','eval' => 'trim,required'
            ],'parent_uid' => [
            'config' => [
                'type' => 'select','items' => [
                    [
                        '','foreign_table' => 'tt_content','foreign_table_where' => 'AND tt_content.pid=###CURRENT_PID### AND tt_content.sys_language_uid IN (-1,###REC_FIELD_sys_language_uid###)','parent_table' => [
            'config' => [
                'type' => 'passthrough','types' => [
        '1' => ['showitem' =>
            '--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,title,bodytext,--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,sys_language_uid,--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,hidden'
        ],];

允许在页面上记录(ext_tables.php):

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::allowTableOnStandardPages('tx_myext_domain_model_mylistitem');

描述新记录的TCA及其自身关系(Configuration / TCA / Overrides / tt_content.php)

$myListItemTca = [
    'tx_myext_mylist' => [
        'exclude' => true,'label' => 'Field label','config' => [
            'appearance' => [
                'collapseAll' => '1','enabledControls' => [
                    'dragdrop' => '1','levelLinksPosition' => 'bottom','useSortable' => '1','foreign_field' => 'parent_uid','foreign_table_field' => 'parent_table','maxitems' => '20','minitems' => '1','type' => 'inline',];

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns(
    'tt_content',$myListItemTca
);

扩展tt_content(ext_tables.sql)

CREATE TABLE tt_content (
    tx_myext_mylist int(11) unsigned DEFAULT '0' NOT NULL,);

添加新的内容元素(Configuration / TCA / Overrides / tt_content.php):

$GLOBALS['TCA']['tt_content']['palettes']['mylist'] = array(
    'showitem' =>
        'tx_myext_mylist; Label','canNotCollapse' => 1
);

$GLOBALS['TCA']['tt_content']['types']['mylist'] = array(
    'showitem' => '
        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,--palette--;;general,--palette--;;headers,--palette--;Label;mylist,',);

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTcaSelectItem(
    'tt_content','CType',[
        'Title','mylist','textmedia','after'
);

这只是一个基本示例,只是几个星期前我制作的一个有效示例中的名称的简化和替换。我应该错过什么吗,发表评论。

BTW:这与遮罩/遮罩导出处理可重复元素的方式相同。因此,当然,您也可以使用遮罩导出并根据自己的目的清理生成的代码(遮罩导出的代码既好又可用,但是会产生一些开销,因为它必须更通用)