Infomeldung im Checkout von bestimmtem Textbaustein ausblenden

Hallo zusammen,

wer kann mir helfen? Im Checkout gibt es blaue Hinweis-Meldungen (“Die Versandart „%oldShippingMethodName%“ ist für Ihren aktuellen Warenkorb nicht verfügbar, die Versandart wurde auf „%newShippingMethodName%“ geändert.”) = Textbaustein “checkout.shipping-method-changed”.

Ich möchte gerne nur diese Hinweis-Meldung für den Kunden ausblenden lassen (da in unserem Fall wirklich irrelevante Meldung für den Kunden, die Versandart ändert sich nämlich nur für uns intern, damit der Kunde den richtigen Sendungsverfolgungs-Link im Checkout angezeigt bekommt, da ich leider ja nur einen Link pro Versandart angeben kann).

Wie könnte ich wo ansetzen, das keine Hinweis-Meldung im blauen Feld erscheint, wenn der Textbaustein “checkout.shipping-method-changed” angezeigt werden würde?

Auch wenn es unschön ist, aber einfach die css klasse mit display:none ergänzen?

würde zumindest die anzeige „deaktivieren“

Das ist eine Flash Message (nicht nachgesehen, von deiner Formulierung her aber zutreffend).

Diese kannst du im twig nur filtern, indem du eine if else abfrage machst oder du gehst per Subscriber vorher in den Prozess und entfernst die Flash Message.

Ich danke euch schonmal - ganz entfernen möchte ich es nicht, zur Not ja, aber am liebsten Wäre mir nur diese Nachricht ausblenden.

Es gibt scheinbar einen Beitrag der sehr ähnlich oder sogar gleich ist, leider gerade erst gefunden (Meldungen im Checkout).

Leider stehe ich wieder auf dem Schlauch. Die passende CSS-Klasse müsste

.alert-info

sein. Aber wie nützt mir das in Verbindung mit

{% sw_extends '@Storefront/storefront/component/checkout/cart-alerts.html.twig' %}

{% block component_checkout_cart_alerts_notices %}
    {% for error in page.cart.errors.notices %}
        {% set snippetName = "checkout.#{error.messageKey}" %}

        {% if snippetName != "checkout.payment-method-changed" %}

            {% sw_include '@Storefront/storefront/utilities/alert.html.twig' with {
                type: "info",
                content: snippetName|trans({'%name%': error.name})|sw_sanitize
            } %}

        {% endif %}

    {% endfor %}
{% endblock %}

Ich müsste das bestimmt wie folgt ändern:

{% sw_extends '@Storefront/storefront/component/checkout/cart-alerts.html.twig' %}

{% block component_checkout_cart_alerts_notices %}
    {% for error in page.cart.errors.notices %}
        {% set snippetName = "checkout.#{error.messageKey}" %}

        {% if snippetName != "checkout.shipping-method-changed" %}

            {% sw_include '@Storefront/storefront/utilities/alert.html.twig' with {
                type: "info",
                content: snippetName|trans({'%name%': error.name})|sw_sanitize
            } %}

        {% endif %}

    {% endfor %}
{% endblock %}

Aber leider nützt das nichts, er zeigt die blauen Info-Meldungen weiterhin an.

cart-alerts.html.twig wird scheinbar nichtmehr benutzt du musst in die base.html.twig. Hier wird es ausgegben im Cart:

{% block base_flashbags %}
                    <div class="flashbags container">
                        {% for type, messages in app.flashes %}
                            {% sw_include '@Storefront/storefront/utilities/alert.html.twig' with { type: type, list: messages } %}
                        {% endfor %}
                    </div>
                {% endblock %}

Hier wird das ausgegeben ich habe mit 6.6 getestet.

VG

1 „Gefällt mir“

Danke dir!

Ich habe gerade eine recht ähnliche Lösung gefunden, die zu funktionieren scheint.

In die „/page/checkout/_page.html.twig“ kommt:

{% sw_extends '@Storefront/storefront/page/checkout/_page.html.twig' %}

{% block base_flashbags_checkout %}
    <div class="flashbags">
        {% for type, messages in app.flashes %}
            {% set filteredMessages = [] %}
            {% for message in messages %}
                {% if 'Versandart' not in message %}
                    {% set filteredMessages = filteredMessages|merge([message]) %}
                {% endif %}
            {% endfor %}

            {% if filteredMessages is not empty %}
                {% sw_include '@Storefront/storefront/utilities/alert.html.twig' with {
                    type: type,
                    list: filteredMessages
                } %}
            {% endif %}
        {% endfor %}
    </div>
{% endblock %}

Und dazu, das es auch im Offcanvas nicht diese Hinweise anzeigt, noch in die “/component/checkout/offcanvas-cart.html.twig”:

{% sw_extends '@Storefront/storefront/component/checkout/offcanvas-cart.html.twig' %}
 
{% block component_offcanvas_cart_flashbags %}
    <div class="flashbags">
        {% for type, messages in app.flashes %}
            {% set filteredMessages = [] %}
            {% for message in messages %}
                {% if 'Versandart' not in message %}
                    {% set filteredMessages = filteredMessages|merge([message]) %}
                {% endif %}
            {% endfor %}

            {% if filteredMessages is not empty %}
                {% sw_include '@Storefront/storefront/utilities/alert.html.twig' with {
                    type: type,
                    list: filteredMessages
                } %}
            {% endif %}
        {% endfor %}
    </div>
{% endblock %}

Seht euch den Code gerne mal an, wie findet ihr das, ist das korrekt so? Es funktioniert aktuell bei mir. Oder könnte man was besser machen?

Das wird aller Wahrscheinlichkeit nicht funktionieren, da darf kein , hin.

Dock klar geht das: for loop mit key, index wie in php foreach(arr as key, index)

1 „Gefällt mir“

Das ist der ursprüngliche, unveränderte original Shopware-Code:

{% block base_flashbags_checkout %}
                                <div class="flashbags">
                                    {% for type, messages in app.flashes %}
                                        {% sw_include '@Storefront/storefront/utilities/alert.html.twig' with { type: type, list: messages } %}
                                    {% endfor %}
                                </div>
                            {% endblock %}

Sollte also kein problem sein.

Vielen Dank an @bemy37 für die Idee mit dem verbesserten Code :+1: :+1:

Meine Lösung und Umsetzung lautet daher für die “/component/checkout/offcanvas-cart.html.twig”:

{% sw_extends '@Storefront/storefront/component/checkout/offcanvas-cart.html.twig' %}

{% block component_offcanvas_cart_flashbags %}
    <div class="flashbags">
        {% for type, messages in app.flashes %}

            {% set filteredMessages = messages|filter(message => 'Versandart' not in message) %}

            {% if filteredMessages is not empty %}
                {% sw_include '@Storefront/storefront/utilities/alert.html.twig' with {
                    type: type,
                    list: filteredMessages
                } %}
            {% endif %}
        {% endfor %}
    </div>
{% endblock %}

Sowie für die “/page/checkout/_page.html.twig”:

{% sw_extends '@Storefront/storefront/page/checkout/_page.html.twig' %}

{% block base_flashbags_checkout %}
    <div class="flashbags">
        {% for type, messages in app.flashes %}

            {% set filteredMessages = messages|filter(message => 'Versandart' not in message) %}

            {% if filteredMessages is not empty %}
                {% sw_include '@Storefront/storefront/utilities/alert.html.twig' with {
                    type: type,
                    list: filteredMessages
                } %}
            {% endif %}
        {% endfor %}
    </div>
{% endblock %}

Wieder etwas gelernt :laughing:

1 „Gefällt mir“