Select TYPO3外部表格:如何为选择下拉菜单指定特定列?

Select TYPO3外部表格:如何为选择下拉菜单指定特定列?,select,typo3,Select,Typo3,我想在TYPO3后端添加记录。为此,我做了一个包含4个不同类的扩展。当通过后端将一个特定类的记录添加到文件夹时,我希望有一个select,允许我从另一个类的列的项目中进行选择。我知道我必须使用foreign\u表来处理这类代码: 'kundeuid' => array( 'exclude' => 1, 'label' => 'LLL:EXT:icingaconfgen/Resources/Privat

我想在TYPO3后端添加记录。为此,我做了一个包含4个不同类的扩展。当通过后端将一个特定类的记录添加到文件夹时,我希望有一个select,允许我从另一个类的列的项目中进行选择。我知道我必须使用
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”以外的值吗?”第二个选项是我想要的