Php 如何在TYPO3中使用type=inline创建重复字段?
在TYPO3中,我想制作一个元素,允许用户在其中创建多个子块。 例如: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
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_内容的新属性
<?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内容的新属性
<?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'
);