Skip to main content
Die WebComponent <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 (beispielsweise Farben) sowie individuell definierte Custom-Filter (beispielsweise 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 (beispielsweise 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 (beispielsweise „Lagerbestand ≥ 1”). Custom-Filter sind somit vordefinierte Filter, bei denen Sie entscheiden, was genau gefiltert werden soll. Typische Anwendungsfälle:
  • Nur verfügbare Produkte (beispielsweise Lagerbestand > 0)
  • „Neuheiten” basierend auf dem Creation Date
  • Sale-Produkte (beispielsweise is_reduced = true)
  • Bewertung (beispielsweise 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 (beispielsweise Kategorien oder Farben)
        • negate: Aktiviert den Ausschluss-Filter. Produkte, die die gewählten Filterwerte enthalten, werden nicht angezeigt. Nur bei type="checkbox" verfügbar
      • range: Schieberegler für Wertebereiche (beispielsweise Preis).
        • display-type: Darstellungstyp des Range-Filters
          • slider: Stellt den Range-Filter nur als einen Slider dar
          • fields: 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 (beispielsweise Farben, Materialien, Muster). Details siehe Bildbasierte Filter.
      • label: Klickbare Label-Optionen mit verstecktem Checkbox-Input (beispielsweise Größen). Details siehe Label-Filter.
    • multiple="true": Erlaubt die Mehrfachauswahl (für type="checkbox", type="image" und type="label", Default bei image und label: false).
    • use-sort: Legt die Reihenfolge der Filterwerte fest. Details siehe Reihenfolge der Filterwerte.
      • ohne Angabe: alphabetisch aufsteigend
      • count: nach Trefferanzahl absteigend
      • numeric: numerisch aufsteigend. Ersetzt das bisherige Attribut use-numeric-sort="true".
    • data-template: Vorlage für die Beschriftung der Filterwerte mit den Platzhaltern {%value%} und {%count%}. Ohne dieses Attribut zeigt der Filter nur den Wert. Wirkt nur bei type="checkbox" und type="label". Bei type="image" wird das Attribut ignoriert. Details siehe Trefferanzahl pro Filterwert anzeigen.
    • name: Definiert das Produktdatenfeld, auf das der Filter angewendet wird, beispielsweise
      • catids für Kategorien
      • price für Preis
Produktdatenfelder, die als Filter genutzt werden, werden standardmäßig positiv ausgewertet. Soll ein Feld alternativ oder ausschließlich negativ filtern, muss in der Konfiguration die negative Variante zu aktiviert werden. Die Logik steuert das Attribut negate innerhalb von <ws-filters>. Wenn beide Varianten parallel verfügbar sein sollen, ist für die negative Darstellung der technische Feldname mit dem Präfix neq_ (beispielsweise 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 (beispielsweise Kategorien oder Farben)
        • negate: Aktiviert den Ausschluss-Filter. Produkte, die die gewählten Filterwerte enthalten, werden nicht angezeigt. Nur bei type="checkbox" verfügbar
    • name: Definiert das Produktdatenfeld, auf das der Filter angewendet wird, beispielsweise
      • catids für Kategorien
      • price für Preis
    • disable-style: Gibt an, wie sich der Filter verhalten soll, wenn er keine Werte enthält:
      • hide: Filter verschwindet grafisch. Nur dieser Wert blendet den Filter tatsächlich aus
      • inactive: Filter bleibt sichtbar und ist inaktiv → reagiert nicht
      • gray-out: Filter bleibt sichtbar, wird ausgegraut und ist inaktiv
      • line-through: Filter bleibt sichtbar, wird durchgestrichen und ist inaktiv
      • blur: Filter bleibt sichtbar, wird geblurred (2px) und ist inaktiv
      • disable-style="disable-style": Abseits der vordefinierten Styles kann man auch die Klasse disable-style anlegen und diese in der eigenen CSS-Datei entsprechend mit Anweisungen belegen. Der Filter bleibt dabei sichtbar
    • 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.
disable-style entscheidet auch darüber, ob der umgebende Wrapper mit dem Attribut filter-container ausgeblendet wird. Der Container verschwindet nur bei disable-style="hide". Bei allen anderen Werten bleibt er stehen, weil die Filteroption bewusst sichtbar bleiben soll. Details siehe Sichtbarkeit von dynamischen und Custom-Filtern (Ausblenden).

Bildbasierte Filter (type="image")

Wenn Sie die Option type="image" auswählen, werden die Filteroptionen als anklickbare Bilder statt als Text dargestellt. Sie können beispielsweise Farbfelder, Materialproben oder Muster verwenden. Die Funktionsweise des Filters entspricht der eines Checkbox-Filters: Ein Klick auf das Bild wählt den Wert aus, ein weiterer Klick hebt die Auswahl wieder auf.
  • Attribute
    • image-path: Pflichtfeld. Pfad zum Verzeichnis, in dem die Bilder der Filteroptionen liegen. Details siehe „Bildpfad“ weiter unten.
    • image-format: Dateiformat der Bilder. Möglich sind jpg, png und webp. Default: jpg
    • image-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
Bildnamen-Konvention Die Komponente setzt die Bild-URL aus drei Teilen zusammen: image-path, dem normalisierten Filterwert und image-format. Für den Dateinamen wird der Filterwert normalisiert:
  • Kleinbuchstaben
  • Leerzeichen werden zu Unterstrichen
  • Alle Zeichen außer a bis z, 0 bis 9, _ und - werden entfernt. Umlaute und ß fallen dabei ersatzlos weg.
Weicht ein Bildname von dieser Konvention ab, kann die Zuordnung über image-map definiert werden. Dies ist besonders bei Werten mit Umlauten oder dem Buchstaben ß wichtig. Ordnen Sie solchen Werte über image-map den passenden Dateinamen zu, damit die Komponente das richtige Bild lädt. Bildpfad Der Wert von image-path lässt sich auf zwei Arten angeben:
  • Pfad ohne Domain wie /images/colors/ oder images/colors/: Der Pfad wird immer vom Domain-Root des Shops aus aufgelöst. Beide Schreibweisen ergeben also dieselbe URL, beispielsweise https://ihr-shop.de/images/colors/.
  • Vollständige URL wie https://example.com/colors/: lädt die Bilder von der angegebenen Domain.
Verhalten
  • Die Komponente fügt das Bild als <img>-Element in das Label der Filteroption ein.
  • Ein Tooltip zeigt den ursprünglichen Wert der Option an.
  • Ausgewählte Optionen erhalten die CSS-Klasse .checked am Label.
  • Kann ein Bild nicht geladen werden, zeigt die Komponente automatisch den Text der Option an. Ein fehlendes Bild führt also nicht zu einer leeren Fläche.

Label-Filter (type="label")

Mit type="label" werden Filteroptionen als klickbare Labels mit verstecktem Checkbox-Input dargestellt, beispielsweise für Größen, die als Buttons statt als Checkbox-Liste angeboten werden sollen.
  • Attribute
    • label-map: JSON-Mapping von Filterwert zu Anzeige-Label (beispielsweise {"xl": "Extra Large"}), für Anzeigetexte, die vom technischen Wert abweichen.
    • data-template: Vorlage für den Label-Inhalt, beispielsweise {%value%} ({%count%}) für den Wert mit Trefferanzahl. Details siehe Trefferanzahl pro Filterwert anzeigen.
    • label-class: CSS-Klasse für das Label-Element.
    • multiple: Erlaubt die Mehrfachauswahl. Default: false
Verhalten
  • Der Checkbox-Input wird versteckt gerendert. Die Auswahl erfolgt über das klickbare Label.
  • Ausgewählte Optionen erhalten die CSS-Klasse .active am Label.

Trefferanzahl pro Filterwert anzeigen (data-template)

Das Suchmodul liefert zu jedem Filterwert die Anzahl der Produkte im aktuellen Ergebnis, die diesen Wert haben. Mit dem Attribut data-template wird diese Zahl neben dem Filterwert angezeigt. Ohne dieses Attribut zeigt der Filter wie bisher nur den Wert. In der Vorlage stehen zwei Platzhalter zur Verfügung:
  • {%value%}: der Filterwert
  • {%count%}: die Anzahl der Produkte mit diesem Wert
Für den Wert „Rot” mit 150 Treffern lautet die Beschriftung Rot (150). Den Text rund um die Platzhalter legen Sie frei fest:
Für die Größe S mit 20 Treffern lautet die Beschriftung Größe 'S' → 20 Ergebnisse. Wie gezählt wird
  • Gezählt werden Produkte, nicht Varianten. Ein Produkt, von dem es mehrere Varianten mit dem Wert “Rot” gibt, wird nur einmal gezählt.
  • Ein Wert, den der Kunde über einen Ausschlussfilter (negate) ausgeschlossen hat, wird im positiven Filter desselben Feldes nicht mehr als Option angeboten. Im Ausschluss-Filter bleibt er stehen und behält in der Regel seine echte Anzahl, weil die Filteroptionen eines Feldes die Filter auf demselben Feld nicht berücksichtigen, auch nicht den Ausschluss. Nur wenn der ausgeschlossene Wert dort sonst fehlen würde, ergänzt das Suchmodul ihn mit der Anzahl 0.
Die Trefferanzahl liefert das Suchmodul nur, wenn values_with_counts in der Filterkonfiguration aktiv ist. Das ist standardmäßig der Fall. Aufbau der Daten im Response siehe ws-search-result.

Reihenfolge der Filterwerte (use-sort)

Das Suchmodul liefert die Filterwerte alphabetisch sortiert. Mit dem Attribut use-sort legen Sie eine andere Reihenfolge fest:
Die Sortierung nach Trefferanzahl lässt sich mit data-template kombinieren. So sieht der Kunde, warum ein Wert weiter oben steht.

Sortierung der Filterwerte innerhalb eines Filters (benutzerdefinierte Reihenfolge)

Fachliche Reihenfolgen wie „Junior, Adult, Senior” oder Größen wie “S, M, L, XL, XXL” lassen sich weder alphabetisch noch über use-sort abbilden. 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.
Die Sortierung wird über das Script realisiert:
  • Attribute
    • sort-list- = technischer Name des Produktdatenfelds/Filters, immer lowercase (beispielsweise 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.
Die Sortierung wird über ein Script-Element im Template realisiert. Dabei liest das Tag WS-FilterSortList() die über den Import bereitgestellte Sortierliste aus.
  • Attribute
    • WS-FilterSortList(Feldname) ist case-sensitive → Feldname muss genau wie im Original verwendet werden (beispielsweise 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)

Ob ein Filter sichtbar bleibt, entscheiden zwei Angaben gemeinsam: das Attribut disable-style am einzelnen <ws-filter> und das Attribut filter-container am umgebenden HTML-Element. Beide greifen nur ineinander, wenn sie zusammenpassen. disable-style steuert den einzelnen Filter disable-style legt fest, wie sich ein Filter verhält, wenn er keine Werte liefert oder für das aktuelle Suchergebnis beziehungsweise die aktuelle Kategorie nicht zutrifft. Nur der Wert hide entfernt den Filter aus der Anzeige. Alle anderen Werte (inactive, gray-out, line-through, blur sowie eine eigene CSS-Klasse) sind genau dafür gedacht, die Filteroption weiterhin anzuzeigen, beispielsweise ausgegraut oder durchgestrichen. filter-container steuert den umgebenden Wrapper filter-container blendet das komplette HTML-Element aus, in dem der Filter liegt, also auch Überschriften und weitere Elemente innerhalb dieses Wrappers. Ein ausgeblendeter Container würde jedoch im Widerspruch zu einer bewusst sichtbar gehaltenen Filteroption stehen. Deshalb greift filter-container nur dann, wenn am enthaltenen <ws-filter> disable-style="hide" gesetzt ist. Bei jedem anderen Wert von disable-style bleibt der Container sichtbar, und der Filter wird lediglich im gewählten Stil deaktiviert dargestellt.
Mehr Informationen zur korrekten Struktur der Wrapper siehe ws-filters.

Filterwerte ohne Auswirkung auf das Ergebnis

Wenn alle Produkte im aktuellen Ergebnis einen bestimmten Filterwert erfüllen, wird das Ergebnis nicht weiter eingegrenzt. Solche Werte können ausgeblendet werden. Setzen Sie dazu das Attribut hide-universal-options="true" am umgebenden <ws-filters>. Standardmäßig ist diese Option deaktiviert und die Werte werden weiterhin angezeigt. Details siehe ws-filters. Beispiel:
In der Kategorie “Hundefutter” haben alle Produkte beim Filter “Tierart” den Wert “Hund”. Die Auswahl “Hund” würde das Ergebnis nicht verändern. Mit hide-universal-options="true" wird der Wert “Hund” im Filter “Tierart” deshalb nicht angezeigt.
Bei Ausschlussfiltern (negate) gilt das unabhängig von dieser Option. Ein Wert, den alle Produkte gemeinsam haben, lässt sich nicht ausschließen, ohne dass das Ergebnis leer wird. Er erscheint deshalb nicht als Option. Werte, die bereits positiv ausgewählt wurden, stehen im Ausschlussfilter ebenfalls nicht zur Wahl.

HTML & CSS

CSS & Styling für Checkboxen

Die Komponente mit dem Attribut type="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 Filtertyp image wird das Bild als <img>-Element in das Label eingefügt. Größe und Zuschnitt des Bildes steuern Sie deshalb über das img im Label, nicht über background-size am Label. Das Label selbst kann über das Attribut label-class mit einer eigenen CSS-Klasse versehen werden, über die sich auch das Bild ansprechen lässt (beispielsweise .color-swatch img). Ausgewählte Optionen tragen zusätzlich die Klasse .checked und können darüber markiert werden (beispielsweise durch einen Rahmen oder ein Haken-Overlay).

CSS & Styling für Label-Filter

Beim Filtertyp label wird der Checkbox-Input versteckt. Sichtbar ist nur das Label, das über das Attribut label-class mit einer eigenen CSS-Klasse gestaltet werden kann (beispielsweise 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:
Für type="range" wird zum Beispiel folgender Quellcode erzeugt:
Funktionen von noUiSlider:
  • Dynamische Bereichsauswahl mit zwei Griffen (beispielsweise Preisfilter von 0 bis 259 €)
  • Anzeige von Tooltips mit den aktuellen Werten
  • Anpassbares Styling über CSS
Die folgenden Klassen werden in der Ausgabe erzeugt und können für individuelles Styling verwendet werden:
  • noUi-base: Basis-Container des Sliders
  • noUi-connect: Bereich zwischen den beiden Griffen des Sliders (zeigt den ausgewählten Bereich)
  • noUi-origin: Position des jeweiligen Slider-Griffs
  • noUi-tooltip: Tooltip, der den aktuellen Wert des Griffs anzeigt
  • noUi-handle: Der tatsächliche Griff, der bewegt werden kann
Die noUiSlider-Bibliothek sollte heruntergeladen werden und kann dann entweder direkt oder über das WEBSALE PageSpeed Tool eingebunden werden.

Javascript-Workaround für die Anzeige des Währungssymbols in einer Price-Range

Die Funktion muss selbstverständlich bei der Auswahl des Filters ausgeführt werden und zum Beispiel auch, wenn Artikel geladen werden.

URL-Filterparameter

Filter können über die URL direkt an das Suchmodul übergeben werden, beispielsweise für Kampagnen, Vorauswahlen oder direkte Verlinkungen mit aktivierten Filtern. Mehr dazu in der Dokumentation zu URL-Filterparameter.