Настройка пользовательских значков для TYPO3 выбора параметров непосредственно из базы данных

Я создал форму для ввода БД с настройками TCA.

Одним из них является поле выбора, для которого мне потребуется отдельный значок для каждой опции. Эти имена значков (основные значки) хранятся в значке поля базы данных (это можно изменить):

+-----+----------------+------------------+
| 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'               => [['', '',]],
],
],

где тска 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'],
],

Но как мне узнать, в каком столбце БД сохранено имя иконки, чтобы я мог загрузить эти данные непосредственно из базы данных?

1

Решение

Я почти уверен, что вы не можете сделать это в TYPO3 в данный момент, но вы можете использовать пользовательскую функцию. Там вы можете просто добавить класс для иконки.

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

Код будет примерно таким:

public function render(array $configuration, UserElement $userElement) {
$row = $configuration['row'];

// Do some Magic here.

$select = '<label style="font-weight: 400;">' . self::MESSAGE_FIELD_LABEL;
$select .= '<select name="' . $configuration['itemFormElName'] . '" class="form-control form-control-adapt" ' .
'onchange=\'' . $configuration['fieldChangeFunc']['alert'] . '\'>';
$select .= '<option value=""></option>';
foreach ($contentElementUids as $siteName => $contentElementUid) {
$isSelected = ($contentElementUid === (int) $configuration['itemFormElValue']);
$select .= '<option ' . ($isSelected ? 'selected' : '') . ' value="' . $contentElementUid . '">' .
$siteName . '</option>';
}
$select .= '</select></label>';

return $select;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]