Hallo zusammen, wir haben eine fertige Mail, aber es fehlt uns die Variable für Lieferzeiten. Gibt es eine Variable, bei der die Lieferzeit in der Bestellbestätigung ergänzt wird? Wie heißt die Variable? Evtl habt ihr einmal die HTML-Zeile für mich.
Andreas ich danke dir. Weißt du denn ob es auch einen Code gibt für die weit entfernteste Versandart? Also du hast drei Artikel und zwei haben 1-3 Tage und einer aber 2 Wochen. Dass dieser dann nur die 2 Wochen anzeigt? Oder aber wir kann ich die je nach Artikel im Warenkorb splitten innerhalb der einzelnen gekauften Produkte?
Ich habe dir leider nicht die richtige Variable gegeben - wie ich selber gerade sehe, gibt {{ order.deliveries.at(0).shippingMethod.deliveryTime.translated.name }} nur den Wert aus, der bei der Versandart als Lieferzeit angeben wurde - und dieser ist nicht Produktabhängig.
Eventuell gäbe es eine Möglichkeit.
Es gibt in der Bestellbestätigung die variablen {{ order.createdAt }} sowie {{ order.deliveries.at(0).shippingDateEarliest }} und {{ order.deliveries.at(0).shippingDateLatest }}
Das ist einmal der Zeitpunkt, an dem die Bestellung getätigt wurde, und der Lieferzeitraum, den Shopware berechnet - womöglich abhängig von dem Produkt mit der längsten Lieferzeit.
Man könnte in der Bestellbestätigung folgendes ergänzen:
{% set orderCreatedAt = order.createdAt|date_modify("+0 day") %}
{% set shippingDateEarliest = order.deliveries.at(0).shippingDateEarliest|date_modify("+0 day") %}
{% set shippingDateLatest = order.deliveries.at(0).shippingDateLatest|date_modify("+0 day") %}
{% set diffEarliest = orderCreatedAt.diff(shippingDateEarliest).days %}
{% set diffLatest = orderCreatedAt.diff(shippingDateLatest).days %}
Lieferzeit: ca. {{ diffEarliest }}-{{ diffLatest }} Werktage
Dann wird eine Zeile ausgegeben, die Lieferzeit heißt. Der Wert nach dem ca. ist die Zeitdifferenz von shippingDateEarliest minus orderCreatedAt sowie shippingDateLatest minus orderCreatedAt.
Es sollte dann eine Ausgabe ergeben im Sinne von: Lieferzeit ca. 5-10 Werktage.
Hi Andreas, danke für deine Rückmeldung. Schau mal anbei die Fotos des Templates. Es scheint noch irgendwo was verkehrt zu sein, zumindest zieht er die Lieferzeiten nicht aus den Produkten.
{% set currencyIsoCode = order.currency.isoCode %}
{% set delivery = order.deliveries.first %}
Füge bitte nach diesen zwei o.g. Zeilen am Anfang der Bestellbestätigung diese Codeabschnitte ein:
{% set orderCreatedAt = order.createdAt|date_modify("+0 day") %}
{% set shippingDateEarliest = order.deliveries.at(0).shippingDateEarliest|date_modify("+0 day") %}
{% set shippingDateLatest = order.deliveries.at(0).shippingDateLatest|date_modify("+0 day") %}
{% set diffEarliest = orderCreatedAt.diff(shippingDateEarliest).days %}
{% set diffLatest = orderCreatedAt.diff(shippingDateLatest).days %}
Anschließend erst, dort wo du die Lieferzeit ausgegeben haben möchtest, den Code
Lieferzeit: ca. {{ diffEarliest }}-{{ diffLatest }} Werktage
Dann wird dir hier an dieser Stelle immer die Lieferzeit vom Artikel mit der längsten Lieferzeit ausgegeben. Nicht von jedem Artikel einzeln, aber die vom „langsamsten“ Artikel.
Bitte nicht vergessen, den Code auch in der Text-Version der Bestellbestätigung ebenso einzubauen.
Schau hierzu mal unter Einstellungen > Lieferzeiten. Da steht „Minimum“ und „Maximum“ - ist bei den betreffenden 1-3 Werktage Artikeln evtl. als Minimum „0“ eingetragen? Dann könntest du das ändern von Minimum 1 auf Maximum 3 - damit die Berechnung in der Mail den Lieferzeitraum wieder korrekt berechnet, dann müsste er auch wieder ca. 1-3 Werktage anzeigen.
Da der Code in zusammenarbeit mit KI entstanden ist, lasse ich hierauf auch gleich die KI Antworten
Die Funktion date_modify("+0 day") in Twig (und ähnlichen Bibliotheken zur Datums-/Uhrzeitmanipulation) mag auf den ersten Blick überflüssig erscheinen, aber sie erfüllt einen bestimmten Zweck, auch wenn sie das Datum selbst nicht verändert. Hier ist eine Aufschlüsselung:
Erstellung eines neuen DateTime-Objekts: Datums-/Uhrzeitobjekte in der Programmierung sind oft veränderlich (können direkt geändert werden) oder unveränderlich (können nicht direkt geändert werden; Änderungen erzeugen ein neues Objekt). date_modify("+0 day")erstellt immer ein neues DateTime-Objekt, auch wenn die Änderung Null ist. Dies ist wichtig, da Variablen in der Regel als Referenzen behandelt werden und wie Datums-/Uhrzeitobjekte an anderer Stelle im Code referenziert werden könnten.
Sicherstellung eines konsistenten DateTime-Objekts: Die ursprünglichen Werte order.createdAt, order.deliveries.at(0).shippingDateEarliest und order.deliveries.at(0).shippingDateLatest könnten unterschiedlichen Typs oder Formats sein. Die Verwendung von date_modify("+0 day") stellt sicher, dass Sie im gesamten Twig-Template mit einem konsistenten DateTime-Objekt arbeiten. Dies ist besonders nützlich, wenn die ursprünglichen Datumswerte aus einer Datenbank oder einem externen System stammen, wo der Typ möglicherweise nicht garantiert ist. Es normalisiert die Daten.
Vermeidung potenzieller Seiteneffekte: Wenn die ursprünglichen Datumsobjekte veränderlich sind und Sie später im Code andere Änderungen an ihnen vornehmen würden, ohne zuerst ein neues Objekt zu erstellen, könnten Sie versehentlich die ursprüngliche Datenquelle ändern. date_modify("+0 day") verhindert dies, indem es eine Kopie erstellt. Dies ist eine gute Vorgehensweise für die Datenintegrität.
Typ-Hinweis oder Typumwandlung (manchmal): In einigen Systemen kann dies auch als eine Form von Typ-Hinweis oder Typumwandlung dienen. Auch wenn es das Datum nicht ändert, wird dem System (und jedem, der den Code liest) explizit mitgeteilt, dass Sie beabsichtigen, mit einem DateTime-Objekt zu arbeiten.
Zusammenfassend: Obwohl date_modify("+0 day") den Wert des Datums nicht ändert, ist es entscheidend für die Erstellung eines neuen, konsistenten und potenziell unveränderlichen DateTime-Objekts, wodurch unbeabsichtigte Seiteneffekte vermieden und die Datenintegrität sichergestellt werden. Es ist eine bewährte Vorgehensweise, insbesondere wenn Sie mit Datumsangaben aus externen Quellen arbeiten oder wenn Sie weitere Datumsmanipulationen planen.
Ja, das ist kompletter Blödsinn, denn die entity definitions sind klar definiert und die Methoden der entities haben klare return types. Hier braucht man nichts „sicher stellen“.
Ich habe die Lösung die KI lösen lassen. Sie sagt:
Die diff()-Methode von PHPs DateTime-Objekt gibt die Differenz zwischen zwei Datumswerten zurück, aber **ohne den Starttag mitzuzählen. Damit der erste Tag mitgezählt wird, solltest du einfach +1 zur Differenz addieren:
twig
KopierenBearbeiten
{% set diffEarliest = orderCreatedAt.diff(shippingDateEarliest).days + 1 %}
{% set diffLatest = orderCreatedAt.diff(shippingDateLatest).days + 1 %}
Jetzt würde eine ursprüngliche Lieferzeit von 1-3 Werktagen auch korrekt als 1-3 angezeigt werden, anstatt 0-2.
Gut zu wissen, das es auch ohne gehen sollte. Mir kam das auch seltsam vor, aber um das wirklich zu hinterfragen bin ich zu sehr Laie - ich war zufrieden, das der Code funktioniert