Craft Commerce - Bestellstatus vom Frontend aktualisieren?
Im Anschluss an diese Frage Commerce: So aktualisieren Sie einen Bestellstatus über das Frontend
Wir möchten es den Zustellfahrern erleichtern, den Status einer Craft-Commerce-Bestellung über eine Frontend-Seite zu aktualisieren. Dies über den CP auf Mobilgeräten zu tun, ist etwas umständlich, da es mehrere Schritte umfasst.
Wir haben einen Benutzergruppen-Anrufkurier erstellt.
{% extends '_layouts/_logistics' %}
{% block logistics %}
{% if currentUser and currentUser.isInGroup('courier') %}
{% include 'logistics/_orders' %}
{% else %}
{% redirect 'account' %}
{% endif %}
{% endblock %}
Im _Ordders Include möchten wir eine Liste von Bestellungen mit jeweils der Schaltfläche "Als geliefert markieren" anzeigen, auf die geklickt werden kann, wenn die Bestellungen vollständig ausgeführt werden.
<dl>
{% if order.shippingAddress %}
{% include 'shop/_includes/addresses/address' with { address: order.shippingAddress } %}
{% endif %}
<dt>{{ order.reference }}</dt>
</dl>
<form method="POST">
<input type="hidden" name="action" value="">
{{ redirectInput('logistics') }}
{{ csrfInput() }}
<input type="hidden" name="orderStatusId" value="4">
<input class="button button--primary" type="submit" value='Mark as Delivered'>
</form>
Ich frage mich, ob dies möglich ist, ohne dass ein Plugin oder Modul erstellt werden muss. Andernfalls ist geplant, die Möglichkeit, dies zu tun, in eine zukünftige Craft Commerce-Version aufzunehmen.
Vielen Dank,
Andrew
Antworten
Das fühlt sich ein bisschen schmutzig an, aber Sie können dies tatsächlich direkt in einer Twig-Vorlage wie dieser tun:
{% set order = craft.orders.id(123).one() %}
{% do order.setAttributes({orderStatusId: 4}, false) %}
{% do craft.app.getElements().saveElement(order) %}
- Natürlich benötigen Sie eine Möglichkeit, um die Reihenfolge abzurufen, die Sie aktualisieren möchten, aber Sie können diese problemlos aus Ihren POST-Daten oder aus der URL oder localStorage oder was auch immer abrufen.