В итоге мы создали собственный модуль, который переопределяет форму обзора таксономии. Я вставил наш код сюда на случай, если это поможет кому-то еще. В нашем случае нам нужно было добавить поле под названием «Акроним», поле «Тип», а также мы добавили «Статус». Вы можете настроить по мере необходимости. Наш пользовательский модуль назывался mc_taxonomy и находился в файле mc_taxonomy.module.
<?php
используйте Drupal\field\FieldConfigInterface;
/**
* Реализует hook_form_FORM_ID_alter().
*
* Добавьте статус, field_acronym и field_type на страницу обзора.
*/
function mc_taxonomy_form_taxonomy_overview_terms_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
// Получить словарь из формы, чтобы прочитать его данные конфигурации поля.
$vocab = $form_state->get(['таксономия', 'словарь']);
$fields = \Drupal::service('entity_field.manager')->getFieldDefinitions('taxonomy_term', $vocab->id());
// Вставляем поля, если они существуют.
mc_taxonomy_overview_insert_field ($ форма, «статус», «статус», 1, функция ($ значение) {
вернуть $значение? «Опубликовано»: «Неопубликовано»;
});
если (isset($fields['field_type'])) {
mc_taxonomy_overview_insert_field($form, $fields['field_type']);
}
если (isset($fields['field_acronym'])) {
mc_taxonomy_overview_insert_field($form, $fields['field_acronym']);
}
}
function mc_taxonomy_overview_insert_field(&$form, $field, $label = null, $index = 1, $valueFunction = null) {
если ($индекс <= 0) {
// TODO Разрешить индекс == 0.
// TODO Проверить верхнюю границу.
throw new Exception('индекс должен быть >= 1.');
}
// Извлекаем данные из $field, если они правильного типа.
если ($field instanceof FieldConfigInterface) {
если (!$метка) {
$метка = $поле->метка();
}
$fieldName = $field->getName();
} еще {
$fieldName = $поле;
}
// Добавляем поле в заголовок.
$form['terms']['#header'] = array_merge(
array_slice($form['terms']['#header'], $index - 1, $index, TRUE),
[$метка],
array_slice($form['terms']['#header'], $index, NULL, TRUE)
);
foreach ($form['terms'] as &$term) {
// Поиск терминов в массиве рендеринга.
если (is_array($term) && !пусто($term['#term'])) {
// Добавляем поле в терм для тела.
$fieldValue = $term['#term']->get($fieldName)->значение;
$term = массив_слияния (
array_slice($term, $index - 1, $index, ИСТИНА),
[
$имя поля => [
'#markup' => $valueFunction ? $valueFunction($fieldValue): $fieldValue,
'#type' => 'предмет',
]
],
array_slice($term, $index, NULL, TRUE)
);
}
}
}