<ws-filter> ermöglicht die Filterung der Suchergebnisse oder Kategorien basierend auf verschiedenen Produkteigenschaften. Sie unterstützt verschiedene Filtertypen wie Checkboxen, Wertebereiche (Range), Schieberegler (Slider), bildbasierte Auswahl (Image) und klickbare Labels (Label).
Es werden dynamisch generierte Filter (z. B. Farben) sowie individuell definierte Custom-Filter (z. B. Topseller, Verfügbarkeit) unterstützt.
Voraussetzung
- Die Komponente muss innerhalb von
<ws-filters>eingebunden werden - Damit die Filterkomponente korrekt funktioniert, muss das Attribut
name=""den technischen Spaltennamen aus dem Datenfeed enthalten, dieser muss zwingend lowercase (kleingeschrieben) sein. Dieser Spaltenname gibt an, auf welches Produktdatenfeld sich der Filter beziehen soll. Beispiele für mögliche Spaltennamen sind:price: Für Preisfilter.color: Für Farbauswahlfilter.brand: Für Markenfilter.
- Die Spaltennamen im Datenfeed werden über die Datenfelder definiert, die in der Konfiguration des Such-Moduls aktiviert und für Filter, Sortierung oder Suche verwendet werden.
Dynamische und Custom-Filter
Die Komponente<ws-filter> unterstützt zwei Arten von Filtern: dynamische Filter und Custom-Filter. Beide Filterarten können im Frontend gleich aussehen (z. B. als Checkbox).
Dynamische Filter
Dynamische Filter basieren direkt auf den Produktdaten – also auf Informationen, die im Datenfeed zu jedem einzelnen Produkt verfügbar sind. Typische Beispiele sind Farbe, Größe oder Marke. Typische Einsatzbereiche für dynamische Filter:- Farbe (
color) - Größe (
size) - Marke (
brand) - Preis (
price) - Zutaten (
ingredients)
Custom-Filter
Custom-Filter basieren nicht auf den einzelnen Werten im Feed, sondern auf technisch definierten Filterbedingungen (z. B. „Lagerbestand ≥ 1”). Custom-Filter sind somit vordefinierte Filter, bei denen Sie entscheiden, was genau gefiltert werden soll. Typische Anwendungsfälle:- Nur verfügbare Produkte (z. B. Lagerbestand > 0)
- „Neuheiten” basierend auf dem Creation Date
- Sale-Produkte (z. B.
is_reduced = true) - Bewertung (z. B.
rating >= 4)
Komponente für Filter
Die einzelnen<ws-filter> für die Filter-Elemente müssen immer innerhalb von <ws-filters> liegen.
Ist <ws-filters> bereits vorhanden, können die weiteren Filter einfach dort ergänzt werden.
Komponente für dynamische Filter
Die Komponente kann wie folgt auf der Kategorie- und Suchergebnisseite eingebunden werden:- Attribute
type: Gibt den Filtertyp an.checkbox: Auswahl über Checkboxen (z. B. Kategorien oder Farben)negate: Aktiviert den Ausschluss-Filter. Produkte, die die gewählten Filterwerte enthalten, werden nicht angezeigt. Nur beitype="checkbox"verfügbar
range: Schieberegler für Wertebereiche (z. B. Preis).display-type: Darstellungstyp des Range-Filtersslider: Stellt den Range-Filter nur als einen Slider darfields: Stellt den Range-Filter nur als Number-Input-Felder dar (2 Input-Felder)slider-fields: Stellt den Range-Filter als Slider und Number-Input-Felder dar
image: Bildbasierte Auswahl über anklickbare Bilder (z. B. Farben, Materialien, Muster). Details siehe Bildbasierte Filter.label: Klickbare Label-Optionen mit verstecktem Checkbox-Input (z. B. Größen). Details siehe Label-Filter.
multiple="true": Erlaubt die Mehrfachauswahl (fürtype="checkbox",type="image"undtype="label"; Default beiimageundlabel:false).use-numeric-sort: Numerisch sortieren. Mögliche Werte:truename: Definiert das Produktdatenfeld, auf das der Filter angewendet wird, z.B.catidsfür Kategorienpricefür Preis
Produktdatenfelder, die als Filter genutzt werden, werden standardmäßig positiv ausgewertet; soll ein Feld alternativ oder ausschließlich negativ filtern, ist in der Konfiguration die negative Variante zu aktivieren. Die Logik steuert das Attribut
negate innerhalb von <ws-filters>. Sollen beide Varianten parallel verfügbar sein, ist für die negative Darstellung der technische Feldname mit dem Präfix neq_ (z.B. neq_field_name) zu verwenden; bei ausschließlich negativer Nutzung ist kein separates neq_-Feld erforderlich. Wichtig: Damit das neq_-Feld überhaupt existiert, muss das negate-Attribut zusätzlich im Importmodul gesetzt werden.Soll der Nutzer selbst zwischen Include und Exclude umschalten können, steht dafür die Komponente ws-filter-toggle zur Verfügung.Komponente für Custom-Filter
Die einzelnen<ws-filter> für die Filter-Elemente müssen immer innerhalb von <ws-filters> liegen.
Die Komponente kann wie folgt auf der Kategorie- und Suchergebnisseite eingebunden werden:
- Attribute
type: Gibt den Filtertyp an.checkbox: Auswahl über Checkboxen (z. B. Kategorien oder Farben)negate: Aktiviert den Ausschluss-Filter. Produkte, die die gewählten Filterwerte enthalten, werden nicht angezeigt. Nur beitype="checkbox"verfügbar
name: Definiert das Produktdatenfeld, auf das der Filter angewendet wird, z.B.catidsfür Kategorienpricefür Preis
disable-style: Gibt an, wie sich der Filter verhalten soll, wenn er keine Werte enthält:hide: Filter verschwindet grafischinactive: Filter ist einfach nur inaktiv → reagiert nichtgray-out: Filter wird ausgegraut und ist inaktivline-through: Filter wird durchgestrichen und ist inaktivblur: Filter wird geblurred (2px) und ist inaktivdisable-style="disable-style": Abseits der vordefinierten Styles kann man auch die Klassedisable-styleanlegen und diese in der eigenen CSS-Datei entsprechend mit Anweisungen belegen.
static-label: Optionaler Label-Text zur Anzeige eines benutzerdefinierten Textes für einen Custom-Filter
<ws-filter>-Instanzen müssen immer innerhalb von <ws-filters> platziert werden. Ist <ws-filters> bereits vorhanden, können die Custom-Filter dort ergänzt werden.Bildbasierte Filter (type="image")
Mit type="image" werden Filteroptionen als anklickbare Bilder dargestellt - z. B. für Farben, Materialien oder Muster.
- Attribute
image-path: Pflichtfeld. Pfad zum Verzeichnis, in dem die Bilder der Filteroptionen liegen.image-format: Datei-Endung der Bilder. Default:jpgimage-map: JSON-Mapping von Filterwert zu Dateiname - für Bildnamen, die von der automatischen Namens-Normalisierung abweichen.label-class: CSS-Klasse für das Label-Element.multiple: Erlaubt die Mehrfachauswahl. Default:false
- Kleinbuchstaben
- Leerzeichen werden zu Unterstrichen
Dark Blue wird zur Datei dark_blue.jpg. Weicht ein Bildname von dieser Konvention ab, kann die Zuordnung über image-map definiert werden.
Verhalten
- Das Label der Filteroption zeigt das Bild als Hintergrundbild (
background-image). - Ein Tooltip zeigt den Original-Wert der Option an.
- Ausgewählte Optionen erhalten die CSS-Klasse
.checkedam Label. - Fehlt ein Bild, wird als Fallback der Text der Option angezeigt.
Label-Filter (type="label")
Mit type="label" werden Filteroptionen als klickbare Labels mit verstecktem Checkbox-Input dargestellt - z. B. für Größen, die als Buttons statt als Checkbox-Liste angeboten werden sollen.
- Attribute
label-map: JSON-Mapping von Filterwert zu Anzeige-Label (z. B.{"xl": "Extra Large"}) - für Anzeigetexte, die vom technischen Wert abweichen.data-template: Mustache-Template für den Label-Inhalt (z. B.{% value %} ({% count %})für den Wert mit Trefferanzahl).label-class: CSS-Klasse für das Label-Element.multiple: Erlaubt die Mehrfachauswahl. Default:false
- Der Checkbox-Input wird versteckt gerendert; die Auswahl erfolgt über das klickbare Label.
- Ausgewählte Optionen erhalten die CSS-Klasse
.activeam Label.
Sortierung der Filterwerte innerhalb eines Filters (benutzerdefinierte Reihenfolge)
Standardmäßig werden Filterwerte alphabetisch sortiert (z. B. „Adult, Junior, Senior”), was für fachliche Reihenfolgen (z. B. „Junior, Adult, Senior” oder Größen S, M, L, XL, XXL) ungeeignet ist. Dafür kann zum Beispiel pro Filter eine Sortierliste bereitgestellt werden, die per Javascript im Template hinterlegt wird.Statische Sortierliste (manuell gepflegt)
Der Filter „Lebensphase” enthält die Werte Adult, Junior und Senior, die aber in folgender Reihenfolge sortiert werden sollen: Junior - Adult - Senior.- Attribute
sort-list-= technischer Name des Produktdatenfelds/Filters, immer lowercase (z. B.lebensphase)- Kommen neue Werte hinzu, muss die Liste manuell erweitert werden.
Sortierliste aus dem Import (Wawi/ERP)
Der Filter „Lebensphase” enthält die Werte Adult, Junior und Senior, die aber in folgender Reihenfolge sortiert werden sollen: Junior - Adult - Senior.WS-FilterSortList() auf eine über den Import bereitgestellte Sortierungsliste zugreift:
- Attribute
WS-FilterSortList(Feldname)ist case-sensitive → Feldname muss genau wie im Original verwendet werden (z. B.Lebensphase).- In der Script-ID bleibt
sort-list-trotzdem lowercase (sort-list-lebensphase) - Die Bereitstellung dieser Importliste muss mit Wawi/ERP abgestimmt werden.
Sichtbarkeit von dynamischen und Custom-Filtern (Ausblenden)
Die Steuerung, ob ein Filter sichtbar ist, erfolgt über das Attributfilter-container, welches HTML-Elementen zugewiesen werden muss.
Mehr Informationen dazu siehe ws-filters.
HTML & CSS
CSS & Styling für Checkboxen
Die Komponente mit dem Attributtype="checkbox" generiert keine spezifischen CSS-Klassen.
Innerhalb der Komponente können keine zusätzlichen CSS-Anweisungen oder HTML-Elemente eingebunden werden.
HTML-Elemente und zusätzliche CSS-Stile können jedoch um die Komponente herum ergänzt werden, um das Layout flexibel anzupassen.
Die Komponente erzeugt zum Beispiel für type="checkbox" den folgenden Quellcode:
CSS & Styling für Image-Filter
Beim Filtertypimage wird das Bild als background-image am Label gesetzt; das Label selbst kann über das Attribut label-class mit einer eigenen CSS-Klasse gestaltet werden (z. B. Größe und Zuschnitt des Bildes). Ausgewählte Optionen tragen zusätzlich die Klasse .checked und können darüber markiert werden (z. B. Rahmen oder Haken-Overlay).
CSS & Styling für Label-Filter
Beim Filtertyplabel wird der Checkbox-Input versteckt; sichtbar ist nur das Label, das über das Attribut label-class mit einer eigenen CSS-Klasse gestaltet werden kann (z. B. als Button). Ausgewählte Optionen tragen zusätzlich die Klasse .active und können darüber hervorgehoben werden.
CSS & Styling für Range-Slider
Für die Range-Slider wird noUiSlider verwendet – eine JavaScript-Bibliothek, die benutzerfreundliche Schieberegler bereitstellt:type="range" wird zum Beispiel folgender Quellcode erzeugt:
noUiSlider:
- Dynamische Bereichsauswahl mit zwei Griffen (z. B. Preisfilter von 0 bis 259 €)
- Anzeige von Tooltips mit den aktuellen Werten
- Anpassbares Styling über CSS
noUi-base: Basis-Container des SlidersnoUi-connect: Bereich zwischen den beiden Griffen des Sliders (zeigt den ausgewählten Bereich)noUi-origin: Position des jeweiligen Slider-GriffsnoUi-tooltip: Tooltip, der den aktuellen Wert des Griffs anzeigtnoUi-handle: Der tatsächliche Griff, der bewegt werden kann
