Cuối cùng, chúng tôi đã tạo một mô-đun tùy chỉnh ghi đè biểu mẫu tổng quan về phân loại. Tôi đã dán mã của chúng tôi ở đây trong trường hợp điều này giúp ích cho người khác. Trong trường hợp của chúng tôi, chúng tôi cần thêm một trường có tên Từ viết tắt, một trường có tên là Loại và chúng tôi cũng đã thêm Trạng thái. Bạn có thể điều chỉnh khi cần thiết. Mô-đun tùy chỉnh của chúng tôi được gọi là mc_taxonomy và mô-đun này nằm trong tệp mc_taxonomy.module.
<?php
sử dụng Drupal\field\FieldConfigInterface;
/**
* Triển khai hook_form_FORM_ID_alter().
*
* Thêm trạng thái, field_acronym và field_type vào trang tổng quan.
*/
function mc_taxonomy_form_taxonomy_overview_terms_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
// Lấy từ vựng từ biểu mẫu để đọc dữ liệu cấu hình trường của nó.
$vocab = $form_state->get(['phân loại', 'từ vựng']);
$fields = \Drupal::service('entity_field.manager')->getFieldDefinitions('taxonomy_term', $vocab->id());
// Chèn các trường nếu chúng tồn tại.
mc_taxonomy_overview_insert_field($form, 'status', 'Status', 1, function ($value) {
trả lại giá trị $? 'Đã xuất bản' : 'Chưa xuất bản';
});
if (isset($fields['field_type'])) {
mc_taxonomy_overview_insert_field($form, $fields['field_type']);
}
if (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) {
nếu ($index <= 0) {
// TODO Cho phép chỉ mục == 0.
// TODO Kiểm tra giới hạn trên.
ném Ngoại lệ mới ('chỉ mục phải> = 1.');
}
// Trích xuất dữ liệu từ $field nếu đúng loại.
if ($field instanceof FieldConfigInterface) {
nếu (!$nhãn) {
$nhãn = $trường->nhãn();
}
$fieldName = $field->getName();
} khác {
$fieldName = $field;
}
// Thêm trường vào tiêu đề.
$form['terms']['#header'] = array_merge(
array_slice($form['terms']['#header'], $index - 1, $index, TRUE),
[$nhãn],
array_slice($form['terms']['#header'], $index, NULL, TRUE)
);
foreach ($form['terms'] as &$term) {
// Tìm các số hạng trong mảng kết xuất.
if (is_array($term) && !empty($term['#term'])) {
// Thêm trường vào thuật ngữ cho phần thân.
$fieldValue = $term['#term']->get($fieldName)->value;
$term = array_merge(
mảng_slice($term, $index - 1, $index, TRUE),
[
$fieldName => [
'#markup' => $valueFunction ? $valueFunction($fieldValue) : $fieldValue,
'#type' => 'mặt hàng',
]
],
mảng_slice($term, $index, NULL, TRUE)
);
}
}
}