Auflistungsfilter, bei dem die Verfügbarkeit von Eigenschaftswerten von anderen ausgewählten Eigenschaftswerten abhängt

Hat jemand einen Auflistungsfilter in Shopware 6 implementiert, bei dem die Verfügbarkeit von Eigenschaftswerten von anderen ausgewählten Eigenschaftswerten abhängt?

Zum Beispiel:
A. rote und schwarze Farbe ist nur für Metall verfügbar
B. blaue und weiße Farbe ist nur für Holz verfügbar

Wir sollten also eine Eigenschaftsabhängigkeit im Backend dafür einrichten.

Kennt jemand eine existierende Lösung oder kann einen Tipp geben, wo man im Shopware 6 Framework ansetzen kann?

Metall bzw. Holz sind ja Varianten (meinem Verständnis nach). Varianten kann man individuelle Eigenschaften zuordnen. Diese müssen nicht vom Parent übernommen werden.

Danke Max_Shop,
das Produkt ist ein Zubehör, das keine Varianten hat.

Eigenschaften werden verwendet, um 3d Partei Produktoptionen zu zeigen, dass es für passt.

Was wir also in einem Filter suchen, ist:

Wenn der Property A Value A01 ausgewählt ist,
dann zeigt der Filter nur die Values B03, B04, B05 für Property B, aber deaktiviert B01, B02, etc.

Vielleicht kann jemand einen Tipp zur Shopware 6-Implementierung geben?

Könnte man das über eine ‚Verschachtelung‘ in SW6 erreichen? Denn Property B ist eine Subproperty von Property A.

Das beschriebene Verhalten ist Shopware-Standard im Listing. In der Detailseite sollte das eigentlich auch Standard sein, habe jetzt aber nicht nachgesehen.

Das beschriebene ist ein Filter

Ich entwickle ein Plugin dafür und habe dies als Ausgangspunkt genommen: Add custom listing filters - Shopware Developer

Vielleicht kann jemand einen Tipp für das Einrichten von Konditionen in Filtern geben. Bitte sehen Sie sich das Mockup an:

Wenn wir Value A 02 auswählen, dann sind Value B 01 und Value B 03 zur Auswahl verfügbar.

Wenn wir Value A 03 auswählen, dann sind Value B 02 und Value B 04 zur Auswahl verfügbar.

Genau dieses Verhalten bildet der Shopware-Standard-Filter ab. Falls du ihn, wieso auch immer, nachbauen möchtest, dann kannst du im Standard-Filter nachsehen, wie dieser die Kombinationen ausschließt.

1 „Gefällt mir“

Danke! Wenn es enthalten ist, wie können wir es verwenden? Gibt es eine Funktion im Backend, die die Kategoriebeziehungen zuweist? Vielleicht kennen Sie.

Ich verstehe die Frage nicht wirklich. Shopware zeigt solche Filter im Frontend automatisch an.

Ich denke, Sie schreiben über Varianten. Wir generieren keine Varianten. Wir haben ein Produkt mit mehreren Eigenschaften.

Wir müssen B-Eigenschaften anzeigen/ausblenden, wenn eine andere A-Eigenschaft ausgewählt ist, wie im Mockup gezeigt.

Shopware handhabt Varianten und Eigenschaften identisch in diesem Punkt, wenn ich mich nicht schwer irre.

1 „Gefällt mir“

Vielleicht. Aber diese Eigenschaften haben jetzt noch nicht einmal Relationen. Alle A Props Eigenschaften und B Props Eigenschaften werden Produkten zugewiesen.

Ein Teil der B Props Eigenschaften sollte angezeigt werden, wenn wir einen A Props Value auswählen.
Ein anderer Teil der B Props Eigenschaften sollte angezeigt werden, wenn wir einen anderen A Props Value auswählen.

Aus diesem Grund denke ich an eine Filteranpassung. Prop B Value aktivieren, wenn der zugehörige (übergeordnete) Prop A Value ausgewählt ist.

Das passiert jetzt schon durch das „ausgrauen“. Einfach die CSS Klassen anpassen und die „ausgegrauten“ Eigenschaften ausblenden.

1 „Gefällt mir“

Es ist klar, was das CSS betrifft, danke.

Aber es ist nicht fertig. Wir haben einen Katalog von Produkten, denen alle A- und B-Eigenschaften zugewiesen sind. Shopware hat keine Daten darüber, welche Werte in diesem Fall angezeigt/ausgeblendet werden sollen. Wir sollten dies einstellen. Vielleicht mit einem Custom Field über das Backend. So können wir A Values B Values zuordnen.

Hi @shopwarer1638 ich glaub du verrennst dich gerade :slight_smile:
Dies ist Grundfunktion in Shopware, wie @Max_Shop dir bereits versucht hat zu erklären und wird über die Varianten und Eigenschaften abgebildet.
Nehmen wir dein Beispiel vom Anfang

Dies kannst du in Shopware abbilden, indem du einen Artikel erstellst inklusive zwei Varianten (Metall, Holz) und diesen Varianten entsprechende Eigenschaft (die jeweilige Farbe) zu ordnest.

Als Beispiel: Du erstellst den Artikel „Zubehör“, generierst die Varianten Metall und Holz für den Artikel und weißt der Variante Metall die Farben Rot und Schwarz zu und der Variante Holz die Farben Blau und Weiß.
Als Resultat hast du einen Artikel „Zubehör“ indem du zwischen den beiden Optionen Metall und Holz wechseln kannst, wählst du Metall hast du die Farben Rot und Schwarz zur Auswahl, bei Holz hättest du die Farben Blau und Weiß zur Auswahl.

Du sagtest zwar das Metall und Holz bei dir keine Varianten sind, aber ich denke im Sinne von Shopware sind sie das. Am Ende hast du ja nur ein Artikel bei dem du zwischen den Optionen Holz und Metall wechseln kannst.

1 „Gefällt mir“

Danke, wir verstehen sehr gut, wie Varianten (und Optionen) funktionieren :+1: :slight_smile: Aber wir brauchen sie nicht.

Es ist ein Produkt, es ist ein Zubehör für mehrere Marken und Modelle (3rd party).

Eigenschaften verwendet, um A-Marken und B-Modelle (der Marken) kompatibel zu beschreiben.

Stellen Sie sich einen Gitarrengurt der Version I vor (das einzige Produkt ohne Varianten), dem Eigenschaften zugeordnet sind:

A: Gibson, Hagstrom, Vox

B: Gibson Hummingbird Standard, Gibson SG, Gibson SG’61, Gibson SG Custom, Gibson SG Tribute, Gibson Les Paul Standard, Gibson Les Paul Classic, Gibson Les Paul Tribute, Hagstrom’67 Viking, Hagstrom Ultra Max, Hagstrom Tremar Viking, VOX V90, Vox Mark III, VOX Giulietta, etc

Und ein Gitarrengurt Version II, der Eigenschaften zugewiesen hat:

A: Gibson

B: Gibson Hummingbird Standard, Gibson SG, Gibson SG’61, Gibson SG Custom, Gibson SG Tribute, Gibson Les Paul Standard, Gibson Les Paul Classic, Gibson Les Paul Tribute

Gitarrengurte gehören zu einer Kategorie. Wenn wir filtern, möchten wir, dass ein Kunde die Marke A ankreuzen kann und dann einige der Werte von B verfügbar sind, aber nicht alle. Wenn wir derzeit Gibson ankreuzen, sind alle B-Values im Filter verfügbar. Aber wir wollen dem Kunden die Auswahl erleichtern. Daher sollen nur die Optionen von Gibson verfügbar sein und andere (Hagstrom, Vox) ausgegraut (oder versteckt).

Wir implementieren einen individuellen Filter und können ihn nach diesem Beispiel nicht zum Funktionieren bringen: Add custom listing filters - Shopware Developer

Wir verwenden ein Beispiel mit boolean ‚isCloseout‘ und filter-multi-select ‚Hersteller‘ (wir planen, andere Eigenschaften zu verwenden, Hersteller wird nur zum Test verwendet).

Hier die Subscriber.php:

{
    public static function getSubscribedEvents(): array
    {
        return [
            ProductListingCollectFilterEvent::class => 'addFilter'
        ];
    }

    public function addFilter(ProductListingCollectFilterEvent $event): void
    {
        $filters = $event->getFilters();
        $request = $event->getRequest();

        $filter = new Filter(
            'manufacturer',

            true,

            [new EntityAggregation('manufacturer', 'product.manufacturerId', 'product_manufacturer')],

            new EqualsAnyFilter('product.manufacturerId', $ids),

            $ids
        );

        $filters->add($filter);
    }
}

Here the filter-panel.html.twig:

{% sw_extends '@Storefront/storefront/component/listing/filter-panel.html.twig' %}

{% block component_filter_panel_items %}
    {{ parent() }}

    {% sw_include '@Storefront/storefront/component/listing/filter/filter-multi-select.html.twig' with {
        name: 'manufacturer',
        displayName: 'Manufacturer'
    } %}
{% endblock %}

Der Filter ‚isCloseout‘ funktioniert nicht. Der Filter ‚Hersteller‘ wird nicht angezeigt.

Darüber hinaus haben wir diesen Fehler in der Browser-Konsole:
‚all.js?1676982356870849:3 Error: At least one item of „.filter-multi-select-checkbox“ must exist in parent node!‘

Wir sind für jede Hilfe dankbar!

Wir haben beschlossen, auf diese in twig Template Logik zu arbeiten. Hier, was wir jetzt haben, aber sicherlich bringen es alle Eigenschaften und Optionen, wenn wir ‚und properties.mediaId == c0d02d1738fd4293a489695787e06b5c‘ verwenden:

{% sw_extends '@Storefront/storefront/component/listing/filter-panel.html.twig' %}

{% block component_filter_panel_items %}
    {{ parent() }}

    {% block component_filter_panel_item_properties %}
    {% set properties = listing.aggregations.get('properties') %}

    {% if not properties.entities is empty and properties.mediaId == c0d02d1738fd4293a489695787e06b5c %}
        {% for property in properties.entities %}

            {% sw_include '@Storefront/storefront/component/listing/filter/filter-property-select.html.twig' with {
                elements: property.options,
                sidebar: sidebar,
                name: 'properties',
                displayName: property.translated.name,
                displayType: property.displayType,
                pluginSelector: 'filter-property-select',
                propertyName: property.translated.name
            } %}

        {% endfor %}
    {% endif %}
	{% endblock %}

{% endblock %}

Kann jemand einen Tipp geben, wie man Bedingungen für Optionen festlegen kann? So können wir nur einige von ihnen anzeigen.

Kann auch jemand helfen, um Filter angewendet Ergebnisse zu finden (wenn wir eine der Filteroptionen aktivieren) in einem Dump vielleicht? :slight_smile:

Ich erhalte alle Eigenschaften und Optionen mit {{ dump(listing.aggregations) }}

aber wie kann ich aktive Filteroptionen dumpen?