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

Php 如何在TYPO3中使用type=inline创建重复字段?,php,typo3,fluid,typo3-9.x,Php,Typo3,Fluid,Typo3 9.x,在TYPO3中,我想制作一个元素,允许用户在其中创建多个子块。 例如: Create New + | |- Sub Block | |- Assets | |- Text Field | |- Sub Block | |- Assets | |- Text Field 据我所知,这是使用 但是,文档假定您知道该过程的所有先前步骤,并且我没有找到关于此类元素的教程。您可以使用扩展并为您的内容元素类型生成扩展 它们为您处理从表增强到表声明的所有事情,所有代码都使用mySQL和PHP(包括T

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

Create New +
|
|- Sub Block
|  |- Assets
|  |- Text Field
|
|- Sub Block
|  |- Assets
|  |- Text Field
据我所知,这是使用


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

您可以使用扩展并为您的内容元素类型生成扩展

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


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


  • 您可以使用扩展和为您的内容元素类型生成扩展

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


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


  • 要将具有1:n关系的新内容元素添加到新记录(不是内容元素),必须添加新记录和描述tt_内容和记录之间关系的tt_内容的新属性

  • 为新记录添加新表
  • 为新记录添加TCA
  • 允许在默认页面中添加记录
  • 扩展表tt_内容
  • 为新内容元素添加TCA
  • 作为一个基本示例,我创建了一个新记录“my_list_item”和一个新内容元素“my_list”:

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

    描述TCA中的新记录(Configuration/TCA/tx_myext_domain_model_mylistem.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',
                'config' => [
                    'type' => 'select',
                    'renderType' => 'selectSingle',
                    'default' => 0,
                    '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',
                'config' => [
                    'type' => 'input',
                    'size' => 30,
                    'eval' => 'trim,required'
                ],
            ],
            'parent_uid' => [
                'config' => [
                    'type' => 'select',
                    'renderType' => 'selectSingle',
                    'items' => [
                        [
                            '',
                            0,
                        ],
                    ],
                    'default' => 0,
                    '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, l10n_parent, l10n_diffsource, --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access, hidden'
            ],
        ],
    ];
    
    
    描述新记录的TCA及其与自身的关系(Configuration/TCA/Overrides/tt_content.php)

    扩展tt_内容(ext_tables.sql)

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

    这只是一个基本的例子,从几个星期前我做的一个工作例子中删减和替换了名字。如果我遗漏了什么,请评论


    顺便说一句:这与掩码/掩码导出处理可重复元素的方式相同。因此,当然,您也可以使用掩码导出并为自己的目的清理生成的代码(掩码导出的代码很好且可用,但有一点开销,因为它必须更通用)

    要添加与新记录(非内容元素)具有1:n关系的新内容元素,必须添加新记录和描述tt\u内容与记录之间关系的tt\u内容的新属性

  • 为新记录添加新表
  • 为新记录添加TCA
  • 允许在默认页面中添加记录
  • 扩展表tt_内容
  • 为新内容元素添加TCA
  • 作为一个基本示例,我创建了一个新记录“my_list_item”和一个新内容元素“my_list”:

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

    描述TCA中的新记录(Configuration/TCA/tx_myext_domain_model_mylistem.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',
                'config' => [
                    'type' => 'select',
                    'renderType' => 'selectSingle',
                    'default' => 0,
                    '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',
                'config' => [
                    'type' => 'input',
                    'size' => 30,
                    'eval' => 'trim,required'
                ],
            ],
            'parent_uid' => [
                'config' => [
                    'type' => 'select',
                    'renderType' => 'selectSingle',
                    'items' => [
                        [
                            '',
                            0,
                        ],
                    ],
                    'default' => 0,
                    '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, l10n_parent, l10n_diffsource, --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access, hidden'
            ],
        ],
    ];
    
    
    描述新记录的TCA及其与自身的关系(Configuration/TCA/Overrides/tt_content.php)

    扩展tt_内容(ext_tables.sql)

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

    这只是一个基本的例子,从几个星期前我做的一个工作例子中删减和替换了名字。如果我遗漏了什么,请评论


    顺便说一句:这与掩码/掩码导出处理可重复元素的方式相同。因此,当然,您也可以使用掩码导出并为自己的目的清理生成的代码(掩码导出的代码很好且可用,但有一点开销,因为它必须更通用)

    首先,您需要创建一个扩展。如果您以前从未这样做过,请选中“扩展生成器”(composer需要friendsoftypo3/extension builder)。引导程序包()这是创建自定义内容元素的一个很好的起点。对于类似IRER的accordion,也有一些示例。首先,您需要创建一个扩展。如果您以前从未这样做过,请选中“扩展生成器”(composer需要friendsoftypo3/扩展生成器)。bootstrap_包()这是创建自定义内容元素的一个很好的起点。类似IRE的手风琴也有例外。如果我使用mask_export并解构输出,这会告诉我如何独立完成吗?或者输出比从头开始制作同样的东西更复杂吗?
    mask_export
    will g我为您提供了一个完整的扩展和所有必要的代码。当然,您可以将该代码用作扩展的示例。请注意,您需要一些需要匹配的声明(例如DB fieldname-getter/setter-TCA),并且这些用法有时有不同的拼写(camelCase下划线\u用法)如果我使用mask_export并解构输出,这会告诉我如何独立完成吗?或者输出比从头开始做同样的事情更复杂吗?
    mask_export
    将为您提供一个包含所有必要代码的完整扩展。当然,您可以使用该代码作为扩展的示例。请注意注意,您需要一些需要匹配的声明(例如DB fieldname-getter/setter-TCA),这些用法有时有不同的拼写(camelCase下划线_用法)这确实很有帮助,但是它在tt_内容中为
    parent_uid
    parent_table
    提供了一个错误?我忘记了记录本身的TCA,并允许在默认页面上使用此记录。更新了我的答案。现在应该可以工作了…好的,很酷。我现在可以添加元素,但中继器部分有一个红色感叹号,如果您尝试单击“Cre”ate New“它给出一个错误500内部服务器错误?日志文件怎么说?注意:这是一个基本的代码示例。要有一个füll工作解决方案,可以使用掩码。最重要的代码段是关系映射…我复制了cust
    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::allowTableOnStandardPages('tx_myext_domain_model_mylistitem');
    
    $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' => 'tx_myext_domain_model_mylistitem',
                'foreign_table_field' => 'parent_table',
                'maxitems' => '20',
                'minitems' => '1',
                'type' => 'inline',
            ],
        ],
    ];
    
    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns(
        'tt_content',
        $myListItemTca
    );
    
    CREATE TABLE tt_content (
        tx_myext_mylist int(11) unsigned DEFAULT '0' NOT NULL,
    );
    
    $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'
    );