Foto: Annie Theby, via Unsplash
Soll die eigene Backdrop-Website mit einer Suchfunktion ausgestattet werden, liegt die Verwendung des Core-Moduls »Search« nahe: Modul aktivieren, Berechtigungen anpassen, Suchfeld im Layout platzieren, fertig! Gemessen am geringen Aufwand funktioniert die Core-Suche ganz gut, doch jede Anforderung erfüllt sie natürlich nicht.
Bekannte Alternativen wie die Search API sind wiederum ziemlich komplex. Da ist es einfacher, einen Suchfilter mit Hilfe einer Views-Abfrage zu bauen.
Feld-Filter kombinieren
Der Views-Filter »Combine Fields« bietet genau, was wir benötigen. Wie der Name andeutet, werden damit die Inhalte verschiedener Datenfelder kombiniert, z.B. Titel, Textbereich und Schlagwörter. Im Umkehrschluss: nicht erwünschte Felder lassen sich einfach von der Suche ausschließen. Das klingt vielversprechend, also los geht's!
Beispiel Programmsuche
Die Arbeit mit dem flexiblen Views-Modul für Datenbankabfragen erleichtert die Modellierung der Suchfunktion ungemein. Soll etwa nicht die ganze Website durchsucht werden, beschränke ich die Abfrage kurzerhand auf passende Inhaltstypen. Als Beispiel stelle ich die Programmsuche einer Literatur-Website vor, die nur Lesungen und andere Veranstaltungen, aber keine Buchbesprechungen berücksichtigt.
Schritt für Schritt
- Gehe zu Struktur > Ansichten > View hinzufügen (admin/structure/views/add), und aktiviere die Option Neue Seite erstellen.
- Gebe den Seitentitel (z.B. Programmsuche), den Pfad (z.B. programm/suche) und das Anzeigeformat (Unformatierte Liste von Feldern) an. Anschließend geht es per Button weiter zur eigentlichen Views-Konfiguration.
- Füge alle Felder zur Ansicht hinzu, die in den Ergebnissen angezeigt und/oder durchsucht werden sollen, z.B. die Art der Veranstaltung (Lesung, Vortrag, Konzert usw.), Datum und Uhrzeit, Ort, Titel und Textbereich.
- Wenn du ein Feld für Taxonomie-Begriffe verwendest (in diesem Fall Art der Veranstaltung), füge im Bereich Beziehungen eine datenmäßige Beziehung zum Feld hinzu. Das ist die Voraussetzung dafür, dass statt Begriffs-IDs auch die Namen der Begriffe durchsucht werden.
- Im Bereich Filterkriterien stellst du sicher, dass nur veröffentlichte Inhalte eines bestimmten Typs (hier Programmveranstaltung) angezeigt werden.
- Als Sortierkriterium bietet sich beispielsweise das Veranstaltungsdatum an.
Nun kommt die eigentliche Such- bzw. Filterfunktion:
- Gehe erneut zu Filterkriterien, suche nach Global: Feld-Filter kombinieren, und füge diesen Filter hinzu.
- Aktiviere in der Konfiguration die Option Diesen Filter für Seitenbesucher freigeben, wähle den Operator (ich empfehle »Enthält«, s. Fazit unten), und markiere die oben genannten Felder zum Kombinieren.
- Wechsle zum Bereich Hervorgehobenes Formular, aktiviere die Möglichkeit, das Suchformular als Block verfügbar zu machen und wähle den Stil Eingabe erforderlich.
Da die Views-Ansicht auch für die Darstellung der Suchergebnisse verantwortlich ist, kann die Gestaltung zum Abschluss noch abgerundet werden. Mögliche Stellschrauben: Gruppierung und Nummerierung der Ergebnisse, Formatierung der Felder, Ergänzung weiterer Filter, Zusammenfassung im Kopfbereich (»total Ergebnisse«), Verhalten bei null Ergebnissen, Seitennavigation und einige mehr.
Nach dem Speichern der Ansicht muss noch der Block mit dem Suchformular über das Layout-System eingebunden werden, und schon ist die Suche einsatzbereit.
Fazit
Genau genommen handelt es sich beim bespochenen Views-Filter um keine echte Suchfunktion: Der Inhalt wird nicht indexiert, und es gibt kein echtes 'Search snippet'. Letzteres bedeutet für mich eine klare Einschränkung, mir fehlt die Snippet-typische Hervorhebung des Suchbegriffs. Eine Indizierung habe ich dagegen noch nicht vermisst, denn die Views-Filterfunktion ist erstaunlich schnell.
Ein weiteres Plus ist der Filter-Operator »Enthält«. Im Gegensatz zur Core-Suche von Backdrop werden damit auch Teilbegriffe gefunden: So liefert eine Suche nach »Lesung« auch einen Beitrag, in dessen Text nur die Plural-Form »Lesungen« steht. Noch nicht so komfortabel wie eine 'fuzzy search', doch meiner Erfahrung nach führt eine Suche mit dem Views-Filter »Combine Fields« häufig zu guten Ergebnissen.