问题描述
在TYPO3中,我想制作一个允许用户在其中创建多个子块的元素。 例如:
Create New +
|
|- Sub Block
| |- Assets
| |- Text Field
|
|- Sub Block
| |- Assets
| |- Text Field
据我了解,这是使用type='inline'
完成的但是,文档假设您知道该过程的所有先前步骤,并且我还没有找到有关此类元素的教程。
解决方法
您可以使用扩展名mask
和mask_export
为您的内容元素生成扩展名。
它们使用mySQL和PHP中的所有代码(包括TCA,getter / setter等)为您处理从表增强到表声明的所有事情。
如果您想自己做,请查看文档:
,要添加与新记录(不是内容元素)具有1:n关系的新内容元素,您必须添加新记录和tt_content的新属性,该属性描述tt_content与记录之间的关系。
- 为您的新记录添加新表
- 添加TCA作为新记录
- 允许在默认页面中添加记录
- 扩展表tt_content
- 为您的新内容元素添加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:这与遮罩/遮罩导出处理可重复元素的方式相同。因此,当然,您也可以使用遮罩导出并根据自己的目的清理生成的代码(遮罩导出的代码既好又可用,但是会产生一些开销,因为它必须更通用)