Ich versuche, den Filter nach Bedingung in der Twig-Vorlage zu ändern. Aber kann nicht machen es funktionieren, kann jemand Tipp vielleicht, was ich falsch mache? Hier der Code, den ich habe:
{% sw_extends '@Storefront/storefront/component/listing/filter-panel.html.twig' %}
{% block component_filter_panel_items %}
{% block component_filter_panel_item_properties %}
{% set properties = listing.aggregations.get('properties') %}
{% set currentoptions = slot.data.listing.currentFilters.get('properties') %}
{% if not properties.entities is empty %}
{% for property in properties.entities %}
{% if currentoptions.entities == "c0d02d1738fd4293a489695787e06b5c" %}
test1
{% else %}
{% 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
} %}
{% endif %}
{% endfor %}
{% endif %}
{% endblock %}
{{ dump(slot.data.listing.currentFilters) }}
{% endblock %}
Oder sollte ich diese Logik in Subscriber.php integrieren?
Kann mir auch jemand einen Tipp geben, wie ich es implementieren sollte, damit die Kondition akzeptiert wird. Jetzt muss ich die Seite manuell neu laden, damit dies funktioniert:
{% if ( not properties.entities is empty ) and ( 'c0d02d1738fd4293a489695787e06b5c' in slot.data.listing.currentFilters.properties ) %}
Ich machte es funktionieren (obwohl der Code Optimierung benötigen, aber es funktioniert). Das einzige Frage, die ich jetzt habe, ist ich brauche, um die Seite (Im Webbrowser) manuell nach der Anwendung benutzerdefinierte Filterung (Ausblenden property.options abhängig von anderen property.options ausgewählt) neu zu laden.
Kann mir jemand einen Tipp zum Neuladen des Filters geben? Hier der Code:
{% sw_extends '@Storefront/storefront/component/listing/filter-panel.html.twig' %}
{% block component_filter_panel_items %}
{#
{{ dump(listing.aggregations.elements.properties.entities.elements[0].options.elements) }}
#}
{% block component_filter_panel_item_properties %}
{% set properties = listing.aggregations.get('properties') %}
{# Checking, if Prop A is selected #}
{% if ( not properties.entities is empty ) and ( 'c0d02d1738fd4293a489695787e06b5c' in slot.data.listing.currentFilters.properties ) %}
<p>CUSTOM FILTER ON</p>
{% for property in properties.entities %}
{# Filtering Props B #}
{% set propertyoptionsA = property.options|filter((v, k) => k != "6189b900a31f436885e3210d1a19abe8" and k != "03ef7f5772924e5980a30c041dc92494" and k != "1ead635c607d47d8a3b59720b84be6e8" and k != "73f357184eba4c03a6c89a92990357a7" and k != "a7a3d5a4bad5463f92070b83b09df6eb" and k != "1a9c286cbeef4c16a782355fba2757b7" and k != "ca3b626c25ca4cd68289360bf405f7b2" and k != "478ed551d8d94fd38efc5cefdb1ade88" and k != "8133c4d61b1c40c4b8713b0fe2095fac" and k != "a499309dff6b48c7a15c022d709d8ac5" and k != "16b8a946e19b474d9f9c2242ea271d0c" and k != "dfeee618e74645759aa6c5b4184c24d8" and k != "4d895d3c9cea423dbd10c2adbf9260e8") %}
{% sw_include '@Storefront/storefront/component/listing/filter/filter-property-select.html.twig' with {
elements: propertyoptionsA,
sidebar: sidebar,
name: 'properties',
displayName: property.translated.name,
displayType: property.displayType,
pluginSelector: 'filter-property-select',
propertyName: property.translated.name
} only %}
{% endfor %}
{% else %}
<p>CUSTOM FILTER OFF</p>
{% 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 %}
Für Filtermanipulationen möchte ich die verfügbaren Eigenschaften an Twig übergeben. Ich mache das über Subscriber. Ich konnte Products als Beispiel dafür in den Context setzen. Aber wie kann ich das mit Properties machen, kann mir jemand einen Tipp geben?
Sollte ich die Listing Aggreggations Extension dafür verwenden?
Hier der Code, den ich habe:
public function handleResult(ProductListingResultEvent $event)
{
$array1 = $event->getResult()->getElements();
$event->getContext()->assign($array1);
$event->getContext()->addExtension('ContextExtension1', new ArrayEntity($array1));
}