Lieferzeit im Warenkorb statt Lieferzeitraum

Hallo zusammen,

aus vielfältigen Gründen möchte ich im Warenkorb NICHT den berechneten Lieferzeitraum, sondern die auf der Produkt-Detailseite sichtbare Lieferzeit anzeigen lassen. Hat jemand eine Idee, wie ich das bewerkstellige?

Ich habe folgendes probiert:

{% sw_extends '@Storefront/storefront/component/line-item/element/delivery-date.html.twig' %}
{% block component_line_item_delivery_date_inner %}
            <div class="product-detail-delivery-information">
                {% if product.shippingFree %}
            {% block component_delivery_information_shipping_free %}
                <p class="delivery-information delivery-shipping-free">
                    <span class="delivery-status-indicator bg-info"></span>
                    {{ "general.deliveryShippingFree"|trans|sw_sanitize }}
                </p>
            {% endblock %}
        {% endif %}

        {% if not product.active %}
            {% block component_delivery_information_not_available %}
                <link itemprop="availability"
                      href="http://schema.org/LimitedAvailability">
                <p class="delivery-information delivery-not-available">
                    <span class="delivery-status-indicator bg-danger"></span>
                    {{ "general.deliveryNotAvailable"|trans|sw_sanitize }}
                </p>
            {% endblock %}
        {% elseif product.releaseDate and product.releaseDate|date('U') > "now"|date('U') %}
            {% block component_delivery_information_pre_order %}
                <link itemprop="availability"
                      href="http://schema.org/PreOrder">
                <p class="delivery-information delivery-preorder">
                    <span class="delivery-status-indicator bg-warning"></span>
                    {{ "general.deliveryShipping"|trans|sw_sanitize }} {{ product.releaseDate|format_date('long', locale=app.request.locale) }}
                </p>
            {% endblock %}
        {% elseif (product.availableStock >= product.minPurchase or (downloadFlag in product.states and not product.isCloseout)) and product.deliveryTime %}
            {% block component_delivery_information_available %}
                <link itemprop="availability" href="http://schema.org/InStock">
                <p class="delivery-information delivery-available">
                    <span class="delivery-status-indicator bg-success"></span>

                    {{ "detail.deliveryTimeAvailable"|trans({
                        '%name%': product.deliveryTime.translation('name')
                    })|sw_sanitize }}
                </p>
            {% endblock %}
        {% elseif product.isCloseout and product.availableStock < product.minPurchase %}
            {% block component_delivery_information_soldout %}
                <link itemprop="availability" href="http://schema.org/OutOfStock">
                <p class="delivery-information delivery-soldout">
                    <span class="delivery-status-indicator bg-danger"></span>
                    {{ "detail.soldOut"|trans|sw_sanitize }}
                </p>
            {% endblock %}
        {% elseif product.availableStock < product.minPurchase and product.deliveryTime and product.restockTime %}
            {% block component_delivery_information_restock %}
                <link itemprop="availability" href="http://schema.org/LimitedAvailability">
                <p class="delivery-information delivery-restock">
                    <span class="delivery-status-indicator bg-warning"></span>
                    {{ "detail.deliveryTimeRestock"|trans({
                        '%count%': product.restockTime,
                        '%restockTime%': product.restockTime,
                        '%name%': product.deliveryTime.translation('name')
                    })|sw_sanitize }}
                </p>
            {% endblock %}
        {% else %}
            {% block component_delivery_information_default %}{% endblock %}
        {% endif %}
    </div>
        {% endblock %}

Das Ergebniss ist, das er immer nur " Diese Auswahl steht nicht zur Verfügung" anzeigt.

Moin @Andreas_147,

Theoretisch sollte das im Line Item stehen, also probier mal über einen
{{ dump() }} an die Variable in den Line Item zu kommen, also z. B.
„deliveryPosition.lineItem.deliveryInformation.deliveryTime.name“

Wenn das klappt solltest du das ja eigentlich in den passenden Block schreiben können den du da nutzen möchtest.

Moin @m.terschluse,

ich habe den Entwickler-Modus aktiviert und über dump probiert, mir die Variablen anzeigen zu lassen. Leider ohne erfolg, im Offcanvas-Warenkorb bekomme ich nur eine Fehlermeldung.

Leider frustriert mich die Arbeit mit Shopware 6 etwas.

Wieso, liebes Shopware-Team, kann man im Warenkorb nur „keine Lieferzeit“ oder den berechneten Lieferzeitraum anzeigen lassen (welcher für unsere Artikel einfach absolut unpraktisch ist)?

Es wäre schön, wenn ich statt „gar nichts“ eben die beim Produkt angezeigte Lieferzeit nochmal in den Warenkorb übernehmen kann - einfach so, wie das beim wundervollen Shopware 5 immer war.

Wie macht man das am besten? So wie ich es verstehe, über ein „line item“ (korregiert mich bitte, wenn ich hier falsch liege). Aber wie/wo legt man so ein line item an und befüllt es? Gibts hierfür irgend eine Anleitung?

Wenn ich z.B. folgendes mache:

{% sw_extends '@Storefront/storefront/component/line-item/element/delivery-date.html.twig' %}
{% block component_line_item_delivery_date %}
    {% set deliveryPosition = null %}

    {% if page.cart.deliveries.count > 0 %}
        {% set delivery = page.cart.deliveries.first %}

        {% set deliveryPosition = delivery.positions.get(lineItem.id) %}
    {% endif %}

    {% if deliveryPosition and deliveryPosition.deliveryDate %}
        {% block component_line_item_delivery_date_inner %}
            <div class="line-item-delivery-date">
                {{ "general.deliveryShippingTime"|trans|sw_sanitize }}
            </div>
        {% endblock %}
    {% endif %}
{% endblock %}

Zeigt er im Warenkorb beim Artikel statt dem Lieferzeitraum das an: „Lieferzeit ca. %shippingTime% Werktage“

Wie bekomme ich es hin, das er die %shippingTime% aus den Produktdaten übernimmt?

Leider habe ich den Vorschlag von @m.terschluse damals nicht ganz richtig verstanden, aber ich denke, ich bin mit seinem Vorschlag einer geeigneten Lösung sehr nahe.

Ich habe folgendes umgesetzt:

{% sw_extends '@Storefront/storefront/component/line-item/element/delivery-date.html.twig' %}
{% block component_line_item_delivery_date %}
{{ parent() }}
{% if deliveryPosition and deliveryPosition.deliveryDate %}
{% block component_line_item_delivery_date_inner %}
<div class="line-item-delivery-date">
{{ "checkout.lineItemDeliveryDateNew"|trans|sw_sanitize }} {{ deliveryPosition.lineItem.deliveryInformation.deliveryTime.name }}
</div>
{% endblock %}
{% endif %}
{% endblock %}

Dazu habe ich den neuen Textbaustein „checkout.lineItemDeliveryDateNew“ angelegt - und ihn in meinem Fall mit dem Inhalt „Lieferzeit ca.“ befüllt.

Jetzt wird schön im Warenkorb die beim Produkt unter „Lieferzeit“ zugewiesene Textangabe ausgegeben - also z.B. „Lieferzeit ca. 2-5 Werktage“ oder „Lieferzeit ca. 1-3 Tage“ steht dann dort. Nicht ausgegeben wird die Wiederauffüllzeit, die bräuchte ich aber generell nicht. Auch der farbige Punkt zum Lieferstatus fehlt (aber das lässt sich, denke ich, auch verschmerzen).

Hat jemand noch Ideen oder Verbesserungsvorschläge hierzu? Anregungen und Vorschläge sind jederzeit willkommen!

Moin @Andreas_147,

sehe jetzt erst deine Kommentare,
deine Lösung sieht ja erst mal richtig aus.
Das ist das was du erzielen wolltest oder?

Den Punkt wirst du dir irgendwie anders zusammenbauen müssen an die Wiederauffüllzeit solltest du aber tatsächlich relativ einfach kommen, evtl. indem du einmal die Position setzt:

{% set deliveryPosition = delivery.positions.get(lineItem.id) %}

Und dann sollte es im deliveryPosition.lineItem.deliveryInformation. restockTime stehen haben.

Kein Problem, ich danke dir, nur durch deinen Tipp konnte ich es überhaupt umsetzen.

Ich hab probiert, was du vorgeschlagen hast. Wenn man {% set deliveryPosition = null %} auf {% set deliveryPosition = delivery.positions.get(lineItem.id) %} ändert, erhält man über deliveryPosition.lineItem.deliveryInformation.restockTime die Wiederauffüllzeit.

Jetzt müsste man vermutlich noch eine if-abfrage einbauen, ob er die Wiederauffüllzeit angeben soll (bei sofort lieferbaren Artikel ist das ja nicht der Fall) oder nicht. Und man bräuchte noch eine zusätzlichen, angepassten Textbaustein.

Da ich aber ein paar Dropshipping-Artikel im Shop habe, werde ich für die Wiederauffüllzeit zwar einen Wert setzen [damit überhaupt eine Lieferzeit angezeigt wird], aber über die Anpassung des Textbausteins „detail.deliveryTimeRestock“ von "{1} Versandfertig in 1 Tag, Lieferzeit %name% |]1,Inf[ Versandfertig in %restockTime% Tagen, Lieferzeit %name% " auf neu „Lieferzeit ca. %name%“ die Wiederauffüllzeit ausblenden lassen.

Ich lese hier aufmerksam mit, weil das Thema auch rein rechtlich gesehen absolut katastrophal umgesetzt wurde.
Anstatt dem Shopbetreiber hier eine Wahl zu lassen, entweder die Lieferzeitangabe als Zeitspanne anzugeben oder als Datum, werden hier auch noch beide Angaben miteinander vermischt.
Hinzu kommt die Tatsache, dass ihr mit der Angabe eines festen Datums einen Liefertermin mit dem Kunden vereinbart. Hier muss der Kunde nicht einmal mahnen, um euch bei Nichtlieferung zu dem vereinbarten Termin in Verzug zu setzen und kann ggf. auch Schadenersatz geltend machen.

Nur am Rande, eBay praktiziert diesen Mist auch schon länger, genau wie idealo (wobei die ja nur Preisvergleich machen). Offensichtlich halten die ganzen Entscheider den Kunden mittlerweile für so blöd, dass selbst Lieferzeitspannen in Kalendertage umgerechnet werden müssen.

Das Ausblenden der Lieferzeit im Warenkorb ist hier leider auch keine Option.

Auf der Bestellübersichtsseite, vor Kaufabschluss, wird ebenfalls die Lieferspanne als Datum angegeben.

In SW5 hatten wir in unsere Bestellbestätigung die Angabe der Lieferzeit mit eingefügt, da es unserer Meinung nach kundenfreundlicher ist, wenn dort die Lieferzeit zum Zeitpunkt der Bestellung aufgeführt ist.
Mit Einführung von SW6 hatten wir die Hoffnung, dass die Angabe der Lieferzeit mit in die Bestellbestätigung übernommen wird. Dem ist leider nicht so. Alles sehr frustrierend.

Tom