Am ajuns să creăm un modul personalizat care înlocuiește formularul de prezentare generală a taxonomiei. Am lipit codul nostru aici în cazul în care acest lucru ajută pe altcineva. În cazul nostru trebuia să adăugăm un câmp numit Acronym, un câmp numit Type și am adăugat și Status. Puteți ajusta după cum este necesar. Modulul nostru personalizat se numea mc_taxonomy și acesta era în fișierul mc_taxonomy.module.
<?php
utilizați Drupal\field\FieldConfigInterface;
/**
* Implementează hook_form_FORM_ID_alter().
*
* Adăugați status, field_acronym și field_type la pagina de prezentare generală.
*/
funcția mc_taxonomy_form_taxonomy_overview_terms_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
// Obțineți vocabul din formular pentru a citi datele de configurare a câmpului său.
$vocab = $form_state->get(['taxonomie', 'vocabular']);
$câmpuri = \Drupal::service('entity_field.manager')->getFieldDefinitions('taxonomy_term', $vocab->id());
// Inserați câmpuri dacă există.
mc_taxonomy_overview_insert_field($form, 'stare', 'Stare', 1, funcţie ($valoare) {
returnează $valoare? „Published” : „Nepublicat”;
});
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) {
dacă ($index <= 0) {
// TODO Permite index == 0.
// TODO Verificați limita superioară.
throw new Exception('indexul trebuie să fie >= 1.');
}
// Extrageți datele din $field dacă sunt de tipul potrivit.
if ($field instanceof FieldConfigInterface) {
dacă (!$etichetă) {
$label = $field->label();
}
$fieldName = $field->getName();
} altfel {
$fieldName = $field;
}
// Adăugați câmp la antet.
$form['terms']['#header'] = array_merge(
array_slice($form['terms']['#header'], $index - 1, $index, TRUE),
[$label],
array_slice($form['terms']['#header'], $index, NULL, TRUE)
);
foreach ($form['terms'] ca &$term) {
// Găsiți termeni în matricea de randare.
if (este_matrice($term) && !gol($term['#term'])) {
// Adăugați câmp la termenul pentru corp.
$fieldValue = $term['#term']->get($fieldName)->value;
$term = array_merge(
array_slice($term, $index - 1, $index, TRUE),
[
$fieldName => [
'#markup' => $valueFunction ? $valueFunction($fieldValue): $fieldValue,
'#type' => 'articol',
]
],
array_slice($term, $index, NULL, TRUE)
);
}
}
}