Craft Commerce - Perbarui status pesanan dari frontend?

Aug 31 2020

Mengikuti dari pertanyaan ini Commerce: Bagaimana memperbarui status pesanan melalui frontend

Kami ingin memudahkan pengemudi pengiriman untuk memperbarui status pesanan perdagangan kerajinan, dari halaman depan. Melakukannya melalui CP di seluler agak merepotkan karena melibatkan banyak langkah.

Kami telah membuat kurir panggilan grup pengguna.

{% extends '_layouts/_logistics' %}

{% block logistics %}
    {% if currentUser and currentUser.isInGroup('courier') %}
        {% include 'logistics/_orders' %}
    {% else %}
        {% redirect 'account' %}
    {% endif %}
{% endblock %}

Di _orders include, kami ingin menampilkan daftar pesanan, masing-masing dengan tombol 'Tandai sebagai Terkirim', yang dapat diklik saat pesanan terpenuhi.

<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>

Saya bertanya-tanya apakah ini bisa dilakukan, tanpa perlu membangun plugin atau modul? Selain itu, apakah ada rencana untuk menyertakan kemampuan untuk melakukan ini dalam rilis Craft Commerce di masa mendatang.

Terimakasih banyak,

Andrew

Jawaban

1 JamesSmith Sep 01 2020 at 22:18

Ini terasa agak kotor, tetapi Anda sebenarnya dapat melakukannya langsung di template Twig seperti ini:

{% set order = craft.orders.id(123).one() %}
{% do order.setAttributes({orderStatusId: 4}, false) %}
{% do craft.app.getElements().saveElement(order) %}

- tentu saja Anda memerlukan cara untuk mengambil pesanan mana yang ingin Anda perbarui, tetapi Anda dapat dengan mudah mengambilnya dari data POST Anda atau dari URL atau localStorage atau apa pun.