Craft Commerce - Bestellstatus vom Frontend aktualisieren?

Aug 31 2020

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

1 JamesSmith Sep 01 2020 at 22:18

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.