Blizz Logo for Drupal Thunder CMS

Teaser anywhere! . Blizz Dynamic Entitylist

von Ralf Hendel
am

Eine typische Anforderung unserer Kunden besteht darin, dass Redakteure kontextuell passende Teaser-Listen innerhalb von Artikeln platzieren möchten. Zu bestimmten Themen, die üblicherweise mit einem oder mehreren Schlagworten ausgezeichnet sind, möchten sie ihren Lesern weiterführende Artikel als Hintergrundinformationen anbieten. Die Auswahl der Artikel soll dabei dynamisch erfolgen.

Dabei hatten wir zwei Hauptanforderungen zu adressieren:

  • Redakteure sollen nicht mit der komplizierten Oberfläche von "Views" in Kontakt kommen.
    Views ist zwar ein sehr mächtiges Instrument für Site-Builder, für den normalen Anwender oder Redakteur sind die komplexen Konfigurations-Oberflächen von Views jedoch viel zu kompliziert.
  • Die dynamischen Listen sollen normalen Content darstellen.
    Die den Auswahlen zugrunde liegende Abfragen dürfen keinesfalls als Konfiguration behandelt werden: Sie sollen nicht als YAML-Dateien exportiert und in die Code-Basis des Projekt übernommen werden müssen.

Die Anforderungen haben wir generisch umgesetzt, sodass sich nicht nur Artikel-Teaser sondern beliebige Entities – wie zum Beispiel vollständige Nodes, Bilder oder Benutzer – auswählen lassen.

Nordschleswiger - Redaktion
Redakteure freuen sich über die Möglichkeit, Teaserlisten beliebig platzieren zu können. Hier: Chefredakteur Gwyn Nissen (vorne), Carsten Werth (links) und Cornelius von Tiedemann vom Nordschleswiger.

Blizz Dynamic Entitylist für Thunder

Als Basis unserer Drupal 8 Portale setzen wir auf Thunder und haben die bestehende Funktionalität mit dem Modul "Blizz Dynamic Entitylist" erweitert, das wir unter unserem Label "Blizz" als Open Source Modul auf Drupal.org veröffentlicht haben.

Das Modul lässt sich selbstverständlich mit und ohne Thunder verwenden. Es bringt einen neuen Feld-Typen mit, innerhalb dem die Listendefinition gespeichert wird. Die Selektion und Darstellung der Liste beruht auf der Core-Methode "Entity-Query" und den jeweiligen View-Buildern der Entities.

Für Thunder haben wird daraus eine Komponente gebaut, mit der Redakteure beliebige Listen innerhalb ihres Paragraph-basierten Contents platzieren können.

Teaser-Listen einfach erstellt

Mit einem intuitiven Auswahl-Widget erstellen Redakteure Listen aus beliebigen Entity-Typen. Blizz Dynamic Entitylist analysiert die Referenzierungs-Felder des gewählten Entity-Bundles und bietet für sämtliche auf Taxonomien referenzierende Felder eine dynamische Filter-Auswahl an. Die gewünschten Tags werden per Autocomplete vervollständigt.

Der Redakteur kann sowohl die Anzahl der Einträge festlegen als auch ein Offset angeben, sodass innerhalb der Liste die ersten x Elemente überspringen werden. Die Sortierung der Entities erfolgt abteigend anhand ihrer "Created"-Property bzw. – sofern die Entities keine "Created"-Eigenschaft besitzen – aufsteigend anhand des Titels der Entity.

Während der redaktionellen Bearbeitung werden die gefilterten Ergebnisse als Live-Vorschau im Backend dargestellt.

Die Auswahl der zugelassenen Entity-Typen lässt sich im Konfigurations-Backend mit den Feldeinstellungen auf vordefinierte Typen einschränken.

Der Benutzer wird durch einen intuitiven vierstufigen Dialog geführt: Er wählt zuerst einen Entity-Typen, dann ein Bundle, die View-Modes sowie optional taxonomie-basierte Filter.

 

Das redaktionelle Backend von "Blizz Dynamic Entitylist" für Thunder
Ausschnitt mit dem redaktionellen Backend: Wenn die Feldeinstellungen nur einen einzigen Entity-Typen erlauben, wird dieser Typ automatisch gewählt und die entsprechende Abfrageoption ausgeblendet.

Eine besondere Herausforderung bei der Entwicklung des Moduls bestand darin, ein leicht bedienbares vierstufiges Auswahl-Widget (Entity-Type / Bundle / View-Modes / Filter) zu realisieren. Dafür haben wir eine eigene Ajax-Funktionalität implementieren müssen, da die Ajax-Methoden des Drupal Core nur maximal zweistufige Interaktionen unterstützen.

Download und Installation

Die Installation erfolgt entweder per Composer mit dem folgenden Befehl

composer require drupal/blizz_dynamic_entitylist