Benutzer-Werkzeuge

Webseiten-Werkzeuge


tutorials:t9_facettednavigation

Facetten-Navigation

Die im Abschnitt Facetten-Navigation erklärte Funktionalität wollen wir hier mit einem Praxis-Beispiel auf der dbap-demo Installation illustrieren.

Wir verwenden dazu das bereits konfigurierte Template „FacetedNavigation“ (Templates fassen einen Satz von Konfigurationen für ein bestimmtes Szenario zusammen). Die Konfiguration und Erläuterungen dazu finden sich weiter unten auf dieser Seite.

Beispiel

In unserem Beispiel wollen wir den Navigationsweg eines Nutzer nachvollziehen und sehen mit welchen HTTP-GET Anfragen die Daten bereitgestellt werden.

Das Beispiel kann durch anklicken der jeweiligen Links nachvollzogen werden. Sofern ihr Webbrowser XML-Daten nicht „hübsch“ formatiert/visualisiert gehen Sie bitte auf die Suche nach einem Plugin, welches den Browser um diese Funktionalität erweitert.

1. Einstieg in die Navigation

item/get?Template=FacetedNavigation

Dieser Aufruf liefert die Daten für den Einstieg in die Navigation. Die Anzahl Produkte pro Seite ist im Template auf „5“ eingestellt (sofern wie hier nicht explizit angegeben). Es werden also 5 Item-Elemente zurückgegeben. Die Zahl der gesamten Items (die braucht man z.B. für die Paginierung) findet sich als Attribut zur Liste:

<ListOfItems TotalNumberOfItems="24">

2. Marke ausgewählt

Einen Überblick über die Möglichkeiten der Filterung generell finden sie unter Filter-Syntax item/get.

item/get?Template=FacetedNavigation&Brand="tlimo"

Der Nutzer hat nun als erstes eine Marke ausgewählt. Welche weiteren Auswahlmöglichkeiten ihm nun zur Verfügung stehen findet man unterhalb des Elementes „ListOfUsedValues“:

<ListOfUsedValuesForItems>
  <UsedValues CharacteristicIDs="57" CharacteristicDescriptions="Marke" FieldName="Brand">
    <Value Active="true">tlimo</Value>
    <Value>Salto</Value>
    <Value>Rumps</Value>
    <Value>Olá</Value>
    <Value>Donzi</Value>
    </UsedValues>
  <UsedValues CharacteristicIDs="18" CharacteristicDescriptions="Eindeutiger Bezeichner" FieldName="Category">
    <Value>Energy</Value>
    <Value>Limo</Value>
    <Value>Sport</Value>
    <Value>Wasser</Value>
    <Value>Wellness</Value>
  </UsedValues>
  <!-- Price ausgelassen -->
</ListOfUsedValuesForItems>

3. Weitere Marke ausgewählt

item/get?Template=FacetedNavigation&Brand="tlimo","Salto"

Nun hat der Nutzer neben der ersten Marke eine weitere ausgewählt. Mehrere Werte für ein Feld werden immer mit „oder“ kombiniert, verschiedene Felder mit „und“. Am Element „MetaInformation“ sehen wir auch die konkrete Abfrage die auf dem NoSQL-Index abgesetzt wurde (hier die Informationen für den nächsten Aufruf):

<MetaInformation>
  <RequestID>13a99da38f18d5dccfeb879d1ed0a0f7-6660830710548799-20259-35415</RequestID>
  <Information Name="LuceneQueryTimeInMSecs">2</Information>
  <Information Name="LuceneRewrittenQuery">
  +PredecessorTreeNodeIDs:4 +(+(Brand:tlimo Brand:salto) +ConstantScore(Price:[20.0 TO 30.0]) +Active:true
  </Information>
</MetaInformation>

4. Preis-Slider betätigt

item/get?Template=FacetedNavigation&Brand="tlimo","Salto"&Price=20 TO 30

Aus den „UsedValues“-Werten zum Feld „Price“ haben wir nun auf unserer imaginären Webseite einen „Preis-Slider“ gebaut und der Kunde hat dort „20 bis 30 Euro“ eingestellt. Wir sehen in der „ListOfUsedValues“, dass die Auswahlmöglichkeiten, die zu einem leeren Ergebnis führen würden, gekennzeichnet sind („Disabled“-Attribut, welche in der Regel als nicht auswählbar („ausgegraut“) einem Nutzer visualisiert werden):

<ListOfUsedValuesForItems>
  <UsedValues CharacteristicIDs="57" CharacteristicDescriptions="Marke" FieldName="Brand">
    <Value Active="true">tlimo</Value>
    <Value Active="true">Salto</Value>
    <Value Disabled="true">Rumps</Value>
    <Value Disabled="true">Olá</Value>
    <Value Disabled="true">Donzi</Value>
  </UsedValues>
  <!-- Feld "Price" der Übersichtlichkeit halber entfernt -->
  <UsedValues CharacteristicIDs="18" CharacteristicDescriptions="Eindeutiger Bezeichner" FieldName="Category">
    <Value Disabled="true">Energy</Value>
    <Value>Limo</Value>
    <Value>Sport</Value>
    <Value Disabled="true">Wasser</Value>
    <Value Disabled="true">Wellness</Value>
  </UsedValues>
</ListOfUsedValuesForItems>

Paginierung

http://dbap-demo.dstore.de/default/item/get?Template=FacetedNavigation&Brand="tlimo","Salto"&StartAtRowNo=6

Da wir eine Produktanzahl pro Seite von „5“ konfiguriert haben wird mit diesem Beispiel auf Seite 2 „geblättert“. Weitere Informationen finden sie auch unter Paginierung und Sortierung.

Die Paginierung kann sowohl in der klassischen Anwendung (auf bestimmte Seite springen) als auch mit AJAX-Technolgie (blockweises nachladen von Produkten beim Scrollen) eingesetzt werden.

Sortierung

http://dbap-demo.dstore.de/default/item/get?Template=FacetedNavigation&Sort=Price_DESC

Dies ist wieder der Einstieg in die Navigation aus dem Beispiel oben, diesmal absteigend nach Preis sortiert. Weitere Informationen finden sie auch unter Paginierung und Sortierung.

Sind die Werte nach denen sortiert wird (wie in unserem Beispiel die Preise) den Artikel-Varianten zugeordnet richtet sich die Sortierung (der Artikel) immer nach dem höchsten bzw. niedrigsten Wert in den Varianten, sonst würde sich ja je nach Sortierung die Anzahl Artikel (Item-Elemente) in der Liste verändern da Variante 1 ggfs. an anderer Stelle als Variante 2 steht (Varianten aber nur unterhalb von Item-Elementen stehen).

Kombination mit Freitextsuche

Die Freitextsuche mit Relevanzsortierung lässt sich mit der Facetten-Navigation kombinieren. Im folgenden Beispiel gibt der Nutzer zunächst „glas mehrweg“ in ein Suchfeld ein und schränkt dann über eine Marke weiter ein:

item/get?Template=FacetedNavigation&Search=glas mehrweg

item/get?Template=FacetedNavigation&Search=glas mehrweg&Brand=Donzi

<ListOfUsedValuesForItems>
  <UsedValues CharacteristicIDs="57" CharacteristicDescriptions="Marke" FieldName="Brand">
    <Value>tlimo</Value>
    <Value>Salto</Value>
    <Value>Rumps</Value>
    <Value>Olá</Value>
    <Value Active="true">Donzi</Value>
  </UsedValues>
  <!-- Price Werte entfernt -->
  <UsedValues CharacteristicIDs="18" CharacteristicDescriptions="Eindeutiger Bezeichner" FieldName="Category">
    <Value>Limo</Value>
    <Value Disabled="true">Sport</Value>
    <Value>Wasser</Value>
  </UsedValues>
</ListOfUsedValuesForItems>

FilterForUsedValues

Wir haben das Feld „Category“ in der Konfiguration des Templates als „FilterForUsedValues“ konfiguriert (weitere Erklärung siehe Konfiguration und Parameter item/get). Was passiert wenn man dieses Feld als Filter verwendet sehen wir im Folgenden.

item/get?Template=FacetedNavigation&Category="Energy"

Die Werte unterhalb der „ListOfUsedValues“ enthalten nun keine Werte die aufgrund der Category-Einschränkung eigentlich mit dem „Disabled“-Vermerk versehen wären. Ein Anwendungsbeispiel hierzu: Der Einstieg in die Navigation erfolgt über ein Menü mit allen Kategorien (Wasser, Limo, Ernergy usw.). Nach Auswahl einer Kategorie wollen wir als möglichen Marken-Filter nur Werte haben die in der Kategorie auch vorhanden sind und nicht etwa alle Marken (auch aus anderen Kategorien) von denen die Mehrzahl deaktiviert/„disabled“ ist.

<ListOfUsedValuesForItems>
  <UsedValues CharacteristicIDs="57" CharacteristicDescriptions="Marke" FieldName="Brand">
    <Value>tlimo</Value>
    <Value>Salto</Value>
  </UsedValues>
  <UsedValues CharacteristicIDs="53" CharacteristicDescriptions="Verkaufspreis (EUR)" FieldName="Price">
    <Value>1.39</Value>
    <Value>1.49</Value>
  </UsedValues>
  <UsedValues CharacteristicIDs="18" CharacteristicDescriptions="Eindeutiger Bezeichner" FieldName="Category">
    <Value Active="true">Energy</Value>
  </UsedValues>
</ListOfUsedValuesForItems>

Template "FacetedNavigation"

Templates fassen einen Satz von Konfigurationen für ein bestimmtes Szenario zusammen und werden als Application-Settings eingerichtet.

Wir haben für das Beispiel folgende Einstellungen (Erklärung siehe Abschnitt „Facetten-Navigation“ in Konfiguration und Parameter item/get) verwendet:

ParameterWert
Active1
DomainTreeNodeIDs4
FilterForUsedValuesCategory,Search
IncludeVariants1
OnlyMatchingVariants1
ReturnFieldsForItemsArticleNumber,ProductDescription,Price
ReturnFieldsForUsedValuesBrand,Price,Category
ReturnFieldsForVariantsArticleNumber,ProductDescription,Price
tutorials/t9_facettednavigation.txt · Zuletzt geändert: 13.11.2014 (Externe Bearbeitung)