Range Slider wie beim Preis für Maße umsetzen?

Hallo,

mittlerweile gibt es ja bei den Filtern einen Preisfilter mit einem Range Slider, nun würde ich gerne so einen Range Slider auch für meine Maße machen. Kann man das ganze irgendwie umsetzen. Die Entwickler Doku habe ich bereits gelesen aber ich bin mit dem ganzen leider nicht so ganz im Thema. Außerdem habe ich dieses Plug-In gefunden: http://store.shopware.com/lenz424835198618/bestellkommentar-shopware-5.html?c=1026&_ga=1.94878236.1672262218.1483958194

Aber das ist auch nur wieder einer für den Preis.

Ich hatte mal ein Plugin gefunden das sogar kostenlos war womit man diese Slider einstellen konnte, aber ich find es leider nicht mehr wieder.

Weiß jemand eine Lösung?

Ich würde mich sehr darüber freuen da die Zeit langsam drängt.

Gruß

Oliver

*edit* ich wäre auch dazu bereit das ganze im Code zu ändern. Ich kenne mich einwenig in php und html aus. Mit etwas Hilfe würde ich das dann sicher auch schaffen. Ich habe gerade diese Dateien entdeckt: 

C:\Bitnami\shopware-5.2.12-0\apps\shopware\htdocs\engine\Shopware\Bundle\SearchBundle\FacetResult\RangeFacetResult.php

und die

C:\Bitnami\shopware-5.2.12-0\apps\shopware\htdocs\engine\Shopware\Bundle\SearchBundleDBAL\FacetHandler\PriceFacetHandler.php

Die beiden haben doch zu 100 % wasdamit zu tun, der Code sieht auch nicht all zu schwer aus aber mir fehlt da noch das Verständnis was woher kommt. Die Syntax verstehe ich aber. Wäre über Hilfe wirklich dankbar weil ich das ganze auch gerne weiter vertiefen möchte.

*push*

Hi Oliver,

dafür gibt es von Shopware das vordefinierte ProductAttributeFacet. Ohne Plugin lässt sich das aber nicht nutzen. Ich hab hier ein einfaches Beispiel (für das neue Plugin-System). Das Plugin legst Du im Verzeichnis custom/plugins/DeinWunschname an. (In meinem Beispiel ist DeinWunschname gleich VanWittlaerExample - musst Du überall ersetzen.)

Die Datei VanWittlaerExample.php definiert das Template-Verzeichnis, das Du später für die Formatierung des Sliders brauchst:

 'preparePlugin',
        ];
    }
    public function preparePlugin()
    {
        $this->container->get('Template')->addTemplateDir(
            $this->getPath() . '/Resources/Views/'
        );
    }
}

Mit der Datei Resources/services.xml definierst Du einen Subscriber:

In der Datei Subscriber/StorefrontDBAL.php definierst Du einen RequestHandler für Dein Feld:

 'registerRequestHandlers',
        ];
    }

    public function registerRequestHandlers()
    {
        return new CriteriaRequestHandler();
    }

}

Den Request-Handler definierst Du in der Datei Components/SearchBundleDBAL/CriteriaRequestHandler.php:

has('minCapacity') || $request->has('maxCapacity')) {
            $parammin = $request->getParam('minCapacity');
            $parammax = $request->getParam('maxCapacity');
            $criteria->addCondition(
                new ProductAttributeCondition(
                    'attr16',
                    ProductAttributeCondition::OPERATOR_BETWEEN,
                    array('min' => $parammin, 'max' => $parammax)
                )
            );
        }

        $criteria->addFacet(new ProductAttributeFacet(
            'attr16',
            ProductAttributeFacet::MODE_RANGE_RESULT,
            'Capacity',
            'Tragkraft',
            'frontend/listing/filter/vanwittlaer-facet-capacity.tpl'
            ));

    }
}

Also, wir nutzen ‘attr16’ aus s_articles_attributes für die Tragkraft unserer Geräte. ‘Capacity’ im addFacet korrespondiert zu ‘minCapacity’ und ‘maxCapacity’ im addCondition. ‘Tragkraft’ ist das Label, unter dem das Facet im FE angezeigt wird. Dann haben wir noch ein Template definiert, um das Zahlenformat und die Einheit im Range-Slider anzupassen.

Das Template Resources/Views/frontend/listing/filter/vanwittlaer-facet-capacity.tpl sieht bei uns so aus:

{extends file="parent:frontend/listing/filter/facet-range.tpl"}

{block name="frontend_listing_filter_facet_range_slider_config"}
    {$startMin = $facet->getActiveMin()}
    {$startMax = $facet->getActiveMax()}
    {$rangeMin = $facet->getMin()}
    {$rangeMax = $facet->getMax()}
    {$roundPretty = 'true'}
    {$format = '0,00  kg'}
    {$stepCount = 100}
    {$stepCurve = 'linear'}
{/block}

So, ich hoffe, ich hab nichts vergessen und alles schön sauber kopiert - viel Erfolg beim Nachbauen! Plugin im Backend aktivieren nicht vergessen :wink: und natürlich Cache löschen usw.

Geert

Wenn das noch von Interesse ist, wir haben den Range-Slider für einen Kunden implementiert als Option direkt an der Eigenschaft und mit optionaler Maßeinheit. Das Plugin gibts im Store: http://store.shopware.com/blmed18974553034/filter-facetten-als-range-slider.html?number=Blmed18974553034

Schöne Grüße
Christian

Wie das, unsern Code kopiert, sich vom Kunden bezahlen lassen, den Copyright-Hinweis vergessen, und dann noch mal schnell als kostenpflichtiges Plugin eingestellt? Geert sagt Danke (ironisch)!

BTW, in der neuen Shopware 5.3 ist das ein Standard-Feature. (Falls es jemand sucht: im BE unter Grundeinstellungen/Storefront/Filter)

Happy selling,

Geert

3 „Gefällt mir“

Hallo Geert, bzw. vanwittlaer,

vielen Dank für deine Erklärung und dein Beispiel! Konnte es erfolgreich umsetzen und es funktioniert wunderbar… aber eine Frage bleibt mir: Wie bekomme ich den Filter an die letzte Stelle? Aktuell wird er immer als erster Filter angezeigt, am sinnvollsten für mich wäre, wenn der Filter an letzter Stelle erscheinen würde.

Muss man da noch viel rumschreiben, oder geht das auch in einem Einzeiler?

 

Vielen Dank!

Hi,

die Anordnung der Facets ist im Template frontend/listing/actions/action-filter-facets.tpl definiert. Standardmäßig wird da über alle verfügbaren Facets geloopt. Da könntest Du die einzelnen Facets gezielt in der von Dir gewünschten Reihenfolge einstellen.

Wie gesagt, ab 5.3 ist das alles nur noch Einstellungssache :slight_smile: d.h. die anzuzeigenden Facets lassen sich für jede Kategorie individuell konfigurieren.

Viel Erfolg,

Geert

Bei mir wird der Range-Slider in v5.3 angezeigt, jedoch keine Zahlen (z.B. Preis von 40 bis 500Euro).

Woran kann da lieg en?

An ganz vielem. Ohne zu wissen, wie Du dahin gekommen bist, und wahrscheinlich auch ohne zu Debuggen (z.B. mal Blick in die Browser-Console) fällt mir da nichts ein.

Gruß

Geert

@vanwittlaer‍ Ich bedanke mich für den zeit- und nervensparenden Tipp mit den eingebauten Filtern in 5.3  Thumb-Up

Darf ich den Fred nochmal aufgreifen.

 

Man kann nun zwar in SW 5.3 für Freitextfelder einen Rangeslider aktivieren, aber für Artikeleigenschaften scheint es noch immer nicht zu gehen?!?

 

Grüße

 

Timsen

Was meinst Du? Rangeslider für Eigenschaften macht m.E. nicht wirklich Sinn, oder? (Z.B. wenn Eigenschaften eine Farbe sind - was wäre der Range-Slider für Rot, Grün, Blau usw.??)

Wenn Du Zahlenwerte in den Eigenschaften hast (z.B. Spannung bei Akkus - 7.8 V, 12 V, 24 V usw.) würde das zwar auf den ersten Blick Sinn machen, aber wie sollte der Shop das sinnvoll umsetzen? Wie weiß man, dass 12 V mehr als 7,8 V sind - das ist ja als Text hinterlegt.

Die Lösung ist in dem Fall, die Werte aus der Eigenschaft zusätzlich als Zahl in einem Freitextfeld abzulegen und dafür dann den Slider zu definieren.

(Hoffe, ich hab Dich nicht falsch verstanden.)

Happy selling,

Geert