为TYPO3设置自定义图标直接从数据库中选择选项

时间:2018-03-01 12:03:08

标签: php typo3 typo3-8.x

我使用TCA设置创建了一个DB输入表单。

其中一个是选择字段,我需要为每个选项提供不同的图标。那些图标名称(核心图标)存储在db字段图标中(可以更改):

+-----+----------------+------------------+
| uid | title          | icon             |
+-----+----------------+------------------+
| 1   | Active         | overlay-approved |
| 2   | Inactive       | overlay-readonly |
| 3   | Old            | overlay-info     |
| 5   | Limited access | overlay-locked   |
+-----+----------------+------------------+

主要数据很容易加载:

'issuer_id' => [
    'exclude' => true,
    'label'   => 'LLL:EXT:lu_nas/Resources/Private/Language/locallang_db.xlf:document.status',
    'config'  => [
        'type'                => 'select',
        'eval'                => 'required',
        'minitems'            => 0,
        'maxitems'            => 1,
        'foreign_table'       => 'tx_lunas_domain_model_status',
        'foreign_table_where' => 'ORDER BY tx_lunas_domain_model_status.title ASC',
        'items'               => [['', '',]],
    ],
],

将TCA tx_lunas_domain_model_status.php设置ctrl设置为使用标题'label' => 'title'作为名称。

我知道我也可以添加'iconfile' => 'EXT:lu_nas/Resources/Public/Icons/Status.svg'作为所有条目的默认图标,但我不需要(每个条目都需要不同)。

到目前为止,我还发现我可以添加带有图标的自定义项目,如下所示:

'items' => [
    ['', ''],
    ['Limited access', 5, 'overlay-locked'],
    ['Inactive', 3, 'overlay-info'],
    ['Old', 2, 'overlay-readonly'],
    ['Active', 1, 'overlay-approved'],
],

但是,如何在DB列中保存图标名称,以便我可以直接从数据库加载这些数据?

1 个答案:

答案 0 :(得分:1)

我很确定,目前您无法在TYPO3中执行此操作,但您可以使用userFunction。在那里你可以添加图标类。

#! /bin/sh
OLDNAME=$1
NEWHASH=$2
NEWNAME=$(printf "%s" "$OLDNAME" | sed "s/^\([^\.]*\)\.[^\.]*\.\(.*\)/\1\.$NEWHASH\.\2/")
echo $NEWNAME

代码将是这样的:

'config' => [
    'type' => 'user',
    'userFunc' => YYY\XXX\TCA\TcaReferenceField::class . '->render',
]