Direkt zum Inhalt
Drupal 9: Erstellen eines Ansichtsfilters für Taxonomie- und Listenfelder

Ziel:

Für einen unserer Kunden müssen wir das Auswahlfeld in eine Checkbox-Liste umwandeln. 
Wir haben uns dafür entschieden, dies zu unserem Modul „more_fields” hinzuzufügen, damit die Lösung auch für andere Projekte verfügbar ist.


Entwurf:

Wir haben uns dafür entschieden, unsere Logik auf den Filter „taxonomy_index_tid” (Filter, der vom Taxonomie-Modul bereitgestellt wird) zu stützen. Für unseren Filter fügen wir ein Widget hinzu, mit dem der Feldtyp (Auswahlfeld, Optionsfelder, Kontrollkästchen) ausgewählt werden kann.

Automatische Erstellung des Filter views:

Die Filter werden automatisch beim Neuaufbau des Drupal-Caches erstellt. Zwei Hooks ermöglichen diese Aktion ( hook_views_data_alter et hook_field_views_data_alter ). hook_field_views_data_alter ist in unserem Fall besser geeignet, da wir dies zu jedem Feld hinzufügen möchten, das auf einen Taxonomiebegriff verweist.
 

/**
 *
 * @file
 * Provides views data for more_fields.module.
 */
use Drupal\field\FieldStorageConfigInterface;
/**
 * Implements hook_field_views_data_alter().
 *
 * Views integration for entity reference fields which reference taxonomy terms.
 * Adds a term relationship to the default field data.
 *
 * @see views_field_default_views_data()
 */
function more_fields_field_views_data_alter(array &$data, FieldStorageConfigInterface $field_storage) {
  if ($field_storage->getType() == 'entity_reference' && $field_storage->getSetting('target_type') == 'taxonomy_term') {
    foreach ($data as $table_name => $table_data) {
      foreach ($table_data as $field_name => $field_data) {
        if (isset($field_data['filter']) && $field_name != 'delta') {
          // Add filter CheckboxList.
          $data[$table_name]['more_fields_' . $field_name] = [
            'title' => t('Custom filter term taxonomy'),
            'group' => t('More fields'),
            'filter' => [
              'id' => 'more_fields_checkbox_list',
              'title' => 'More fields : ' . $field_storage->getLabel(),
              'field' => $field_name,
              'help' => t('Offers multiple select display format, radios, checkboxes.')
            ]
          ];
        }
      }
    }
  }
}

Ergebnis hinsichtlich der Konfiguration Extras:



Hinweis:

Wenn Sie den Standardfilter ersetzen möchten, verwenden Sie diesen Ansatz und stellen Sie sicher, dass Ihr Hook als letzter ausgeführt wird. (Derzeit werden Hooks in alphabetischer Reihenfolge ausgeführt).

$data[$table_name][$field_name]['filter']['id'] = 'my_custom_module_plugin_filter_id';


 

Profile picture for user admin Stephane K

Écrit le

Il y'a 2 Jahre
Modifié
Il y'a 1 Tag
Lädt...
WhatsApp
Support Habeuk : +237 694 900 622
WhatsApp Send