La page par défaut de liste des termes de taxonomie de drupal 8 n'est pas très flexible. Elle peut facilement être substituée à une vue mais dans ce cas on perd le « drag'n'drop » dans le cas d'une arborescence.
Pour garder ce comportement, mais pouvoir quand même ajouter des colonnes, il est possible de surcharger le formulaire gérant cette page.
Cela se passe en 3 étapes :
1. Déclaration du service d'alteration de la route
# mon_module.services.ymlservices: mon_module.route_subscriber: class: Drupal\mon_module\Routing\VocabularyOverviewRouteProvider tags: - { name: event_subscriber }
2. Altération de la route
get('entity.taxonomy_vocabulary.overview_form'); // Make a change for default taxonomy overview form. $route->setDefault('_form', VocabularyOverviewTerms::class); // Re-add the collection to override the existing route. $collection->add('entity.taxonomy_vocabulary.overview_form', $route); } }
3. Surcharge du formulaire
Note : Ici je ne modifie le formulaire que pour un seul vocabulaire (etudiant_promos) et j'ajoute une colonne « Domain ».
id() !== 'etudiant_promos') { return $form; } // On ajoute l'entête du tableau $form['terms']['#header']['domain'] = $this->t('Domain'); // On parcours les ligne pour ajouter notre colonne foreach ($form['terms'] as $key => &$termRow) { if(strpos($key, 'tid:') === 0) { /** @var \Drupal\taxonomy\Entity\Term $term */ $term = Term::load($termRow['term']['tid']['#value']); /** @var \Drupal\domain\Entity\Domain $domain */ $domain = $term->get('domain')->referencedEntities()[0]; $termRow['domain'] = ['#markup' => $domain->label()]; } } return $form; } }