logo

Extra Block Types (EBT) - Neue Erfahrung im Layout Builder❗

Extra Block Types (EBT) - gestylte, anpassbare Blocktypen: Diashows, Registerkarten, Karten, Akkordeons und viele andere. Eingebaute Einstellungen für Hintergrund, DOM Box, Javascript Plugins. Erleben Sie die Zukunft der Layouterstellung schon heute.

Demo EBT-Module EBT-Module herunterladen

❗Extra Absatztypen (EPT) - Erfahrung mit neuen Absätzen

Extra Paragraph Types (EPT) - analoger, auf Absätzen basierender Satz von Modulen.

Demo EPT-Module EPT-Module herunterladen

Scroll

9.14. Integration mit Views schreiben

25/05/2025, by Ivan

Das Views-Modul ist im Drupal-Ökosystem weit verbreitet. Listen von Inhalten, Tabellen, Blöcke, Diashows, Datenexporte – diese Inhaltsarten werden üblicherweise mit Views dargestellt. Wenn Sie Inhaltstypen, Blocktypen oder andere Entitätstypen verwenden, ist Views bereits automatisch integriert, und Sie können Views zur Darstellung Ihrer Inhalte verwenden. Für Ihr eigenes Custom-Modul, das eine separate eigene Datenbanktabelle verwendet, die Sie mit hook_schema() erstellt haben, müssen Sie jedoch eine Integration mit Views schreiben, um Ihre Moduldaten in der Views-UI anzuzeigen.

Schauen wir uns die Integration für das Modul Did this help mit Views an:

https://www.drupal.org/project/did_this_help

Das Modul erstellt eine eigene Datenbanktabelle zur Speicherung der Daten. In dieser Tabelle gibt es Strings, IDs, Daten, daher müssen wir verschiedene Handler für die Views-Integration definieren:

Did this help database

Zu Beginn müssen Sie die Datei MODULENAME.views.inc hinzufügen, die automatisch geladen wird, sodass Sie den Speicherort der Datei nirgendwo anders angeben müssen. In der Datei *.views.inc implementieren Sie den Hook hook_views_data():

<?php

/**
 * @file
 * Stellt Views-Daten für das Modul did_this_help bereit.
 */

/**
 * Implementierung von hook_views_data().
 */
function did_this_help_views_data() {

}

Diese Implementierung muss ein Array zurückgeben, das die Struktur Ihrer eigenen Datenbanktabelle des Custom-Moduls beschreibt.

https://api.drupal.org/api/drupal/core%21modules%21views%21views.api.php/function/hook_views_data/9.0.x

Beginnen Sie mit dem Datenbanktabellennamen als erstem Schlüssel des Arrays:

  $data['did_this_help'] = [
    'table' => [
      'group' => t('Did this help?'),
      'base' => [
        'field' => 'id',
        'title' => t('Did this help? entries'),
        'help' => t('Contains a list of Did this help? entries.'),
      ],
    ],
  ];

Hier ist die Tabellendefinition mit dem Namen im Array-Schlüssel $data['did_this_help']. Wenn Sie mehrere Datenbanktabellen integrieren möchten, fügen Sie weitere Schlüssel hinzu, z.B. $data['did_this_help1'], $data['did_this_help2'].

Im Array folgt dann die Beschreibung der Tabelle:

  • group – Gruppiert Felder im selben Abschnitt, damit die Auswahl in der Views-UI einfacher ist.
  • base – Definiert die Serien-ID der Tabelle, die später zum Verknüpfen von Tabellen über Fremdschlüssel verwendet wird.

Danach beschreiben Sie jedes Feld, das in Views sichtbar sein soll:

$data['did_this_help']['id']= [
  'real field' => 'id',
  'title' => t('Did this help? record ID'),
  'help' => t('Did this help? record.'),
  'field' => [
    'id' => 'standard',
  ],
  'sort' => [
    'id' => 'standard',
  ],
  'filter' => [
    'id' => 'numeric',
  ],
  'argument' => [
    'id' => 'numeric',
  ],  
];

real field definiert den tatsächlichen Feldnamen (Spalte in der Datenbank), wenn Sie Aliase im Array verwenden. Ein Drupal-Feldtyp kann verschiedene Werte in unterschiedlichen Spalten haben, z.B. hat ein Link-Feld zwei Werte – Title und URI. Jeder Wert entspricht einer Spalte, die aus Feld- und Eigenschaftsname besteht (z.B. title, uri):

Link DB table

Die Spaltennamen werden automatisch vom Link-Modul erstellt, aber bei eigenen Modulen müssen Sie den Wert für real field in hook_views_data() selbst definieren.

title und help sind Informationen für die Views-UI.

Es folgen Handler-IDs für field, sort, filter und argument. Der Handler bestimmt, wie das Feld gefiltert und dargestellt wird. Beispielsweise sollten Datumsfelder mit Datumsformat angezeigt und mit einem Kalender-Popup gefiltert werden. Für Zahlen braucht man Filter mit Operatoren wie >, <, =, für Strings Filter auf Textlänge usw.

Field Handler

Field-Handler helfen, den Teil der SQL-Abfrage nach dem SELECT-Wort zu generieren.

Eine Liste der Views-Field-Handler aus dem Drupal-Core finden Sie hier:

https://api.drupal.org/api/drupal/core%21modules%21views%21src%21Plugin%21views%21field%21FieldPluginBase.php/group/views_field_handlers/8.6.x

Für Custom-Module verwenden Sie meist den standard-Handler für Zahlen und Strings, für Datumsfelder sollten Sie den date-Handler nutzen.

Beispielsweise nutzt das ID-Feld den Field-Handler "standard":

    'id' => [
      'real field' => 'id',
      'title' => t('Did this help? record ID'),
      'help' => t('Did this help? record.'),
      'field' => [
        'id' => 'standard',
      ],
      'sort' => [
        'id' => 'standard',
      ],
      'filter' => [
        'id' => 'numeric',
      ],
      'argument' => [
        'id' => 'numeric',
      ],
    ],

Sort Handler

Sort-Handler ermöglichen das übliche Sortieren und das exponierte Sortieren in Views. Sie definieren den Teil der SQL-Abfrage nach dem Schlüsselwort ORDER BY.

Eine Liste der Sort-Handler finden Sie hier:

https://api.drupal.org/api/drupal/core%21modules%21views%21src%21Plugin%21views%21sort%21SortPluginBase.php/group/views_sort_handlers/8.6.x

Filter Handler

Filter-Handler ermöglichen die Darstellung von regulären Filtern, exponierten und kontextuellen Filtern in Views. Sie definieren den Teil der SQL-Abfrage nach dem Schlüsselwort WHERE.

Eine Liste der Filter-Handler finden Sie hier:

https://api.drupal.org/api/drupal/core%21modules%21views%21src%21Plugin%21views%21filter%21FilterPluginBase.php/group/views_filter_handlers/8.6.x

Um Datumsfelder mit Kalender-Popup zu filtern, können Sie den Handler "date" verwenden:

  $data['did_this_help']['created'] = [
    'title' => t('Created date for Did this help? record'),
    'help' => t('Created date for Did this help? record'),
    'field' => [
      'id' => 'date',
    ],
    'argument' => [
      'id' => 'date',
    ],
    'filter' => [
      'id' => 'date',
    ],
    'sort' => [
      'id' => 'date',
    ],
  ];

Relationship Handler

Relationship-Handler ermöglichen es, SQL-Joins hinzuzufügen und Daten aus mehreren Tabellen in einer Abfrage zu kombinieren.

Die Datenbanktabelle des Moduls Did this help? hat eine Spalte mit Benutzer-IDs. Mit einem Relationship-Handler können Sie eine Beziehung in der Views-UI zwischen den Einträgen in did_this_help und den Nutzern herstellen und Daten aus mehreren Tabellen anzeigen:

  $data['did_this_help']['uid'] = [
    'title' => t('User ID for Did this help? record'),
    'help' => t('User ID for Did this help? record'),
    'field' => [
      'id' => 'standard',
    ],
    'sort' => [
      'id' => 'standard',
    ],
    'filter' => [
      'id' => 'numeric',
    ],
    'argument' => [
      'id' => 'numeric',
    ],
    'relationship' => [
      'title' => t('User'),
      'help' => t('The user on which the log entry was written.'),
      'base' => 'users_field_data',
      'base field' => 'uid',
      'id' => 'standard',
    ],
  ];

Hier definieren wir für das Feld die Beziehung, wobei base die Tabelle angibt, die gejoint wird, und base field das Feld, über das gejoint wird. title und help dienen der Views-UI, id definiert den Relationship-Handler. Eine Liste der Relationship-Typen finden Sie hier:

https://api.drupal.org/api/drupal/core%21modules%21views%21src%21Plugin%21views%21relationship%21RelationshipPluginBase.php/group/views_relationship_handlers/8.6.x

Obwohl Views eine breite Palette von Handlern bereitstellt, können Sie von der Basisklasse eines Handlers erben und eigene benutzerdefinierte Handler für Felder, Filter oder Sortierung schreiben. Im nächsten Artikel werden wir einen eigenen Handler für einen Views-Filter erstellen.