Select TYPO3外部表格:如何为选择下拉菜单指定特定列?
我想在TYPO3后端添加记录。为此,我做了一个包含4个不同类的扩展。当通过后端将一个特定类的记录添加到文件夹时,我希望有一个select,允许我从另一个类的列的项目中进行选择。我知道我必须使用Select TYPO3外部表格:如何为选择下拉菜单指定特定列?,select,typo3,Select,Typo3,我想在TYPO3后端添加记录。为此,我做了一个包含4个不同类的扩展。当通过后端将一个特定类的记录添加到文件夹时,我希望有一个select,允许我从另一个类的列的项目中进行选择。我知道我必须使用foreign\u表来处理这类代码: 'kundeuid' => array( 'exclude' => 1, 'label' => 'LLL:EXT:icingaconfgen/Resources/Privat
foreign\u表
来处理这类代码:
'kundeuid' => array(
'exclude' => 1,
'label' => 'LLL:EXT:icingaconfgen/Resources/Private/Language/locallang_db.xlf:tx_icingaconfgen_domain_model_appliance.kundeuid',
'config' => array(
'type' => 'select',
'renderType' => 'selectSingle',
'foreign_table' => 'tx_icingaconfgen_domain_model_kunde',
'foreign_table_where' => 'ORDER BY tx_icingaconfgen_domain_model_kunde.kundeuid asc',
'items' => array(
array('-- Select Kunde --', 0),
),
'size' => 1,
'maxitems' => 1
),
),
但问题是,我不能指定选择只包括已确定列的属性。相反,选择下拉菜单似乎使用了第一列的属性。如何指定'kundeuid'属性的列
编辑:我忘了提到,代码在TCA文件夹的特定PHP文件中使用。创建另一个表的select from字段值
如果实现了一个提供选择框内容的PHP方法,则可以用任何需要的内容填充选择框。为此,必须使用itemsProcFunc
可能是这样的:
'kundeuid' => [
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'itemsProcFunc' => 'Vendor\Ext\ItemsProcFunc\KundeUid->fetchItems',
],
]
$appliance = $this->applianceRepository->findBySomething('something');
$kunde = $appliance->getKundeuid();
$kundeuid = $kunde->getKundeuid();
在您的方法中,您可以使用kunde表中的值填充项数组(自己查看数据库):
请注意,$params
是通过引用传递的,该方法不需要返回任何内容。此外,您在TCA配置中写入项的任何内容也将存在。无论您选择什么,该选项的值都将存储在数据库字段中
建立关系
如果在TCA配置中使用'foreign_table'
,则您将创建一个与外部表的关系,这始终意味着您正在字段中存储所选记录的uid(除非您使用的是MM表)
在类型3中,每个记录都有一个uid
,该uid在数据库中处于auto_increment
状态,因此在每个表中都是唯一的。以下是TCA配置
'kundeuid' => [
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'foreign_table' => 'tx_icingaconfgen_domain_model_kunde',
],
]
将允许您在选择框中选择kunde
记录,并将其uid
存储在kundeuid
字段中。因此,如果让属性映射器在PHP代码中解决此依赖关系(或者让extbase为您解决,如果您使用存储库和域模型),您将得到如下结果:
'kundeuid' => [
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'itemsProcFunc' => 'Vendor\Ext\ItemsProcFunc\KundeUid->fetchItems',
],
]
$appliance = $this->applianceRepository->findBySomething('something');
$kunde = $appliance->getKundeuid();
$kundeuid = $kunde->getKundeuid();
因此,我建议您将TCA配置用于的字段重命名为类似于client
,这样PHP代码就不会那么混乱了
$appliance = $this->applianceRepository->findBySomething('something');
$client = $appliance->getClient();
$kundeuid = $client->getKundeuid();
创建“从另一个表的值中选择”字段
如果实现了一个提供选择框内容的PHP方法,则可以用任何需要的内容填充选择框。为此,必须使用itemsProcFunc
可能是这样的:
'kundeuid' => [
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'itemsProcFunc' => 'Vendor\Ext\ItemsProcFunc\KundeUid->fetchItems',
],
]
$appliance = $this->applianceRepository->findBySomething('something');
$kunde = $appliance->getKundeuid();
$kundeuid = $kunde->getKundeuid();
在您的方法中,您可以使用kunde表中的值填充项数组(自己查看数据库):
请注意,$params
是通过引用传递的,该方法不需要返回任何内容。此外,您在TCA配置中写入项的任何内容也将存在。无论您选择什么,该选项的值都将存储在数据库字段中
建立关系
如果在TCA配置中使用'foreign_table'
,则您将创建一个与外部表的关系,这始终意味着您正在字段中存储所选记录的uid(除非您使用的是MM表)
在类型3中,每个记录都有一个uid
,该uid在数据库中处于auto_increment
状态,因此在每个表中都是唯一的。以下是TCA配置
'kundeuid' => [
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'foreign_table' => 'tx_icingaconfgen_domain_model_kunde',
],
]
将允许您在选择框中选择kunde
记录,并将其uid
存储在kundeuid
字段中。因此,如果让属性映射器在PHP代码中解决此依赖关系(或者让extbase为您解决,如果您使用存储库和域模型),您将得到如下结果:
'kundeuid' => [
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'itemsProcFunc' => 'Vendor\Ext\ItemsProcFunc\KundeUid->fetchItems',
],
]
$appliance = $this->applianceRepository->findBySomething('something');
$kunde = $appliance->getKundeuid();
$kundeuid = $kunde->getKundeuid();
因此,我建议您将TCA配置用于的字段重命名为类似于client
,这样PHP代码就不会那么混乱了
$appliance = $this->applianceRepository->findBySomething('something');
$client = $appliance->getClient();
$kundeuid = $client->getKundeuid();
当您将属性标签设置为TCA中Kunde
记录的ctrl
部分的Kunde
名称表字段时,您还应该在设备中看到它。也许其他属性标签
*将对您有用。链接到ctrl
文档:当您在TCA中Kunde
记录的ctrl
部分将属性标签设置为Kunde
的名称表字段时,您也应该在设备中看到它。也许其他属性标签
*将对您有用。链接到ctrl
文档:是否只想将所选项目的标签字段或其值更改为外来记录的“uid”以外的值?我尝试更具体地说:“Kunde”类有一个属性“kundeuid”。在后端添加具有相同属性(基本上可以说是外键)的类“Appliance”记录时,应通过选择下拉菜单设置此属性,该下拉菜单包含类“Kunde”的所有现有对象/记录的“Kunduid”值。我想通过在类“Appliance”的特定TCA中使用foreign_表来实现这一点。上面的代码甚至加载了'Kunde'记录的属性,但它似乎使用了错误的列/属性…因此'Kunde'记录的属性'uid'为TYPO3,但另一个名为“kundeuid”的属性需要存储?不,两个类都是。。。Kunde和Appliance的财产为“kundeuid”。。。如果我添加一个设备,我想根据基于Kunde对象的选择设置它的KundueId。基本上每个设备都属于特定的Kunde。这就是为什么设备将kundueid作为外键的原因。我刚刚理解了您昨天提出的问题:“您只是想将所选项目的标签字段或其值更改为外来记录的“uid”以外的值吗?”第二个选项是我想要的