เราลงเอยด้วยการสร้างโมดูลแบบกำหนดเองที่แทนที่แบบฟอร์มภาพรวมอนุกรมวิธาน ฉันวางรหัสของเราไว้ที่นี่ เผื่อจะช่วยคนอื่นได้ ในกรณีของเรา เราจำเป็นต้องเพิ่มฟิลด์ชื่อตัวย่อ ฟิลด์ชื่อประเภท และเรายังเพิ่มสถานะด้วย คุณสามารถปรับเปลี่ยนได้ตามต้องการ โมดูลที่กำหนดเองของเราเรียกว่า mc_taxonomy และอยู่ในไฟล์ mc_taxonomy.module
<?php
ใช้ Drupal\field\FieldConfigInterface;
/**
* ใช้ hook_form_FORM_ID_alter()
*
* เพิ่มสถานะ field_acronym และ field_type ในหน้าภาพรวม
*/
ฟังก์ชัน 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($form, 'status', 'Status', 1, function ($value) {
คืนค่า $ ? 'เผยแพร่แล้ว' : 'ยังไม่ได้เผยแพร่';
});
ถ้า (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']);
}
}
ฟังก์ชัน mc_taxonomy_overview_insert_field(&$form, $field, $label = null, $index = 1, $valueFunction = null) {
ถ้า (ดัชนี $ <= 0) {
// TODO อนุญาตดัชนี == 0
// TODO ตรวจสอบขอบเขตบน
โยนข้อยกเว้นใหม่ ('ดัชนีต้องเป็น >= 1.');
}
// แยกข้อมูลจาก $field หากเป็นประเภทที่ถูกต้อง
ถ้า ($ ฟิลด์อินสแตนซ์ของ FieldConfigInterface) {
ถ้า (! $label) {
$label = $field->label();
}
$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'] เป็น &$term) {
// ค้นหาเงื่อนไขภายในอาร์เรย์เรนเดอร์
ถ้า (is_array($term) && !empty($term['#term'])) {
// เพิ่มฟิลด์ให้กับคำศัพท์สำหรับเนื้อหา
$fieldValue = $term['#term']->get($fieldName)->value;
$term = array_merge(
array_slice($term, $index - 1, $index, TRUE),
[
$fieldName => [
'#markup' => $valueFunction ? $valueFunction($fieldValue) : $fieldValue,
'#type' => 'รายการ',
]
]
array_slice($term,$index,NULL,TRUE)
);
}
}
}