Filtern nach Maßen

Ich muss einen Filter erstellen, wo man nach Höhe/Länge/Breite eines Produkts filtern können soll. Die Werte sind bei allen Produkten gepflegt. a) Wie bekomme ich diese Werte überhaupt in einen Filter ohne sie redundant über Eigenschaften nachzubilden (da müsste ich ja für jedes Maß eine Option anlegen, oder mache ich einen Denkfehler!?)? b) die intuitivste Lösung wären meines Erachtens drei Slider wie beim Preisflter (Höhe/Länge/Breite). Allerdings habe ich das noch bei keinem Shop so geshen, obwohl es auf der Hand liegt. Irgendeine Möglichkeit das zu realisieren? Im Vorraus besten Dank!

Hi, die grundsätzliche Doku dazu finde sich hier: https://developers.shopware.com/develop … ch-bundle/ Wollte da aus Dokumentationsgründen eh nochmal ein kleines Beispiel bauen, das findest du im Anhang. Ist natürlich nur zur Veranschaulichung, kann / wird sicher noch Fehler enthalten. Vom grundsätzlichen Vorgehen sollte das aber einleuchtend sein, denke ich. Daniel

2 „Gefällt mir“

Super - das ist auf jeden Fall mal gutes Material, mit dem ich mich beschäftigen kann und was ich vor allem auch nicht über Google gefunden habe. Vielen Dank!

Das funktioniert perfekt! Vielen Dank! Das einzige, was mich noch interessieren würde ist, wo die Facet-Label „width“, „height“ und „length“ initial hergeholt werden. Ein kleiner Hinweis diesbzgl. würde mich freuen. :slight_smile:

Hi, Im DimensionFacetHandler müsstest du das Snippet hier finden return new RangeFacetResult( $facet-\>getName(), $criteria-\>hasCondition($facet-\>getName()), $facet-\>getName(), $min, $max, $min, $max, $facet-\>getName() . '\_min', $facet-\>getName() . '\_max' Da kannst du deine Textbausteine rein bringen. Übersetzung geht über den Shopware Snippet Manager, das ist jetzt am Handy aber schwer zu zeigen :slight_smile: Daniel Gesendet von meinem SM-N910F mit Tapatalk

1 „Gefällt mir“

Hab’s. Funktioniert prima. Danke!

[quote=“Daniel Nögel”]Hi, Im DimensionFacetHandler müsstest du das Snippet hier finden return new RangeFacetResult( $facet-\>getName(), $criteria-\>hasCondition($facet-\>getName()), $facet-\>getName(), $min, $max, $min, $max, $facet-\>getName() . '\_min', $facet-\>getName() . '\_max' Da kannst du deine Textbausteine rein bringen. Übersetzung geht über den Shopware Snippet Manager, das ist jetzt am Handy aber schwer zu zeigen :slight_smile: Daniel Gesendet von meinem SM-N910F mit Tapatalk[/quote] Ich verstehe nicht ganz wie ich die Textbausteine in DimensionFacetHandler einbauen soll. Kann mir bitte jemand einen Tipp geben?

Keiner eine Idee?

Hi, der kurze Weg ist: Shopware()-\>Snippets()-\>getNamespace('dein/namespace')-\>get('snippetName') Dann kannst du das über das Textbausteine-Modul verwalten. Besten Gruß, Daniel

Ich habe jetzt irgendwie das Problem, dass sich der Slider seine Position nicht merkt, nachdem die Artikel gefiltert wurden. Allerdings meine ich, dass dies bereits funktioniert hätte. Irgendeine Idee?

Danke, ihr habt mir sehr geholfen. Meine Lösung sieht nun so aus: switch ($facet-\>getName()) { case "height": $label = Shopware()-\>Snippets()-\>getNamespace('engine/Shopware/Plugins/Local/Frontend/SwagDimensionFilter')-\>get('height'); break; case "width": $label = Shopware()-\>Snippets()-\>getNamespace('engine/Shopware/Plugins/Local/Frontend/SwagDimensionFilter')-\>get('width'); break; case "length": $label = Shopware()-\>Snippets()-\>getNamespace('engine/Shopware/Plugins/Local/Frontend/SwagDimensionFilter')-\>get('length'); break; } return new RangeFacetResult( $facet-\>getName(), $criteria-\>hasCondition($facet-\>getName()), $label, $min, $max, $min, $max, $facet-\>getName() . '\_min', $facet-\>getName() . '\_max' ); @JeZe: Also bei mir funktioniert das noch siehe:

Was passiert, wenn Du in dem gezigten Zustand auf “Produkte anzeigen” klickst? Dann behält der Filter bei mir nicht den Wert. Und meines Erachtens kann er das auch nicht mit folgendem Code: return new RangeFacetResult( $facet-\>getName(), // facetName $criteria-\>hasCondition($facet-\>getName()), // active $facet-\>getName(), // label $min, // slider min $max, // slider max $min, // active min $max, // active max $facet-\>getName() . '\_min', // min field name $facet-\>getName() . '\_max' // max field name ); Dem obigen Code zufolge ist der aktive Min- und Max-Wert immer gleich dem absoluten Min- und Max-Wert (Parameter 4-7) oder sehe ich das falsch? Wo bekomme ich denn den aktiven min bzw. max-Wert her?

Da hast du recht, habe ich übersehen. Vordem klick auf den Button:

und dannach:

@Daniel Nögel schrieb:

Hi,

die grundsätzliche Doku dazu finde sich hier:

https://developers.shopware.com/develop … ch-bundle/

Wollte da aus Dokumentationsgründen eh nochmal ein kleines Beispiel bauen, das findest du im Anhang. Ist natürlich nur zur Veranschaulichung, kann / wird sicher noch Fehler enthalten.

Vom grundsätzlichen Vorgehen sollte das aber einleuchtend sein, denke ich.

Daniel

könntest du den Anhang wieder zur Verfügungstellen? Dieser ist wohl im Zuge des neuen Forums verschollen. Danke

Hi, hier meine Ergänzungen:

FacetHandler:

    public function generateFacet(
        FacetInterface $facet,
        Criteria $criteria,
        Struct\ShopContextInterface $context
    ) {

        list($min, $max) = $this->getMinAndMaxValues($facet, $criteria, $context);
        
        /** get label */
        
        switch ($facet->getName()) {
            case "height":
            $label = Shopware()->Snippets()->getNamespace('frontend/listing/facet_labels')->get('DFheight');
            break;
            case "width":
            $label = Shopware()->Snippets()->getNamespace('frontend/listing/facet_labels')->get('DFwidth');
            break;
            case "length":
            $label = Shopware()->Snippets()->getNamespace('frontend/listing/facet_labels')->get('DFlength');
            break;
        }
        
        /** get filter settings after "show articles" */
        if ($condition = $criteria->getCondition($facet->getName())) {
            $activeMin = $condition->getMin();
            $activeMax = $condition->getMax();
        }

        /** if = show filter if there is more than one article & min != max */
 if ($min > 0 && $min != $max) {
     return new RangeFacetResult(
         $facet->getName(),
         $criteria->hasCondition($facet->getName()),
         $label,
         (float) $min,
         (float) $max,
         (float) $activeMin,
         (float) $activeMax,
         $facet->getName() . '_min',
         $facet->getName() . '_max'
     );
 }
 return false;
    }

 

Die Snippets: in “mein_plugin/Snippets/frontend/listing/facet_labels.ini”

[en_GB]
DFwidth = "width"
DFheight = "height"
DFlength = "length"
[de_DE]
DFwidth = "Breite"
DFheight = "Höhe"
DFlength = "Länge"

 

1 „Gefällt mir“

@Daniel Nögel schrieb:

Hi,

die grundsätzliche Doku dazu finde sich hier:

https://developers.shopware.com/develop … ch-bundle/

Wollte da aus Dokumentationsgründen eh nochmal ein kleines Beispiel bauen, das findest du im Anhang. Ist natürlich nur zur Veranschaulichung, kann / wird sicher noch Fehler enthalten.

Vom grundsätzlichen Vorgehen sollte das aber einleuchtend sein, denke ich.

Daniel

Da schließe ich mich an. Gibt es den Anhang noch?

Ja - am Ende des Artikels

1 „Gefällt mir“

@bluewolf schrieb:

Ja - am Ende des Artikels

Hi, in dem Anhang finde ich die Passagen nicht, auf die sich oben bezogen wird. Weder der DimensionFacetHandler noch das Snippet mit dem RangeFacetResult lässt sich finden.

Wei es sich da um einen Umbau des Beispiels handelt.Der Download erstellt ja nur den Filter für ESD-Produkte.
Für die Maße muss das alles umgebaut werden, da ja auch andere Daten aus der Datenbank gefragt sind.