Sendcloud uitbreiden

De Sendcloud plugin stelt verschillende Craft events beschikbaar, zodat je data kunt aanpassen voordat orders worden gepusht of labels worden aangemaakt.

# Event listeners registreren

Registreer listeners vanuit de init()-methode van je eigen module (of een andere plek die draait op elke request waar je de listener nodig hebt):

<?php
namespace modules\site;

use yii\base\Module;
use yii\base\Event;
use white\commerce\sendcloud\services\OrderSync;
use white\commerce\sendcloud\services\OrderItems;
use white\commerce\sendcloud\events\AddressEvent;
use white\commerce\sendcloud\events\OrderDetailsEvent;
use white\commerce\sendcloud\events\OrderItemEvent;
use white\commerce\sendcloud\events\ValidateOrderEvent;

class SiteModule extends Module
{
    public function init(): void
    {
        parent::init();

        Event::on(OrderSync::class, OrderSync::EVENT_AFTER_CREATE_ADDRESS, static function(AddressEvent $event): void {
            // ...
        });

        Event::on(OrderSync::class, OrderSync::EVENT_CREATE_ORDER_DETAILS, static function(OrderDetailsEvent $event): void {
            // ...
        });

        Event::on(OrderItems::class, OrderItems::EVENT_CREATE_ORDER_ITEM, static function(OrderItemEvent $event): void {
            // ...
        });

        Event::on(OrderSync::class, OrderSync::EVENT_AFTER_VALIDATE_ORDER, static function(ValidateOrderEvent $event): void {
            // ...
        });
    }
}

# Beschikbare events

# OrderSync::EVENT_AFTER_CREATE_ADDRESS

Wordt getriggerd nadat een Sendcloud-adresmodel is opgebouwd vanuit een Craft-adres.

  • Event class: white\commerce\sendcloud\events\AddressEvent
  • Eigenschappen:
    • $event->craftAddress (craft\elements\Address)
    • $event->sendcloudAddress (white\commerce\sendcloud\models\Address)

Voorbeeld (huisnummer uit addressLine2 mappen):

Event::on(OrderSync::class, OrderSync::EVENT_AFTER_CREATE_ADDRESS, static function(AddressEvent $event): void {
    $event->sendcloudAddress->setHouseNumber($event->craftAddress->addressLine2);
    $event->sendcloudAddress->setAddressLine2(null);
});

# OrderSync::EVENT_CREATE_ORDER_DETAILS

Wordt getriggerd wanneer de Sendcloud order-details payload wordt opgebouwd.

  • Event class: white\commerce\sendcloud\events\OrderDetailsEvent
  • Eigenschappen:
    • $event->order (craft\commerce\elements\Order)
    • $event->orderDetails (white\commerce\sendcloud\models\OrderDetails)

Voorbeeld (statusdata richting Sendcloud overschrijven):

Event::on(OrderSync::class, OrderSync::EVENT_CREATE_ORDER_DETAILS, static function(OrderDetailsEvent $event): void {
    $event->orderDetails->setStatus([
        'code' => $event->order->orderStatus->handle,
        'message' => $event->order->orderStatus->description ?: 'Aangepast via custom module',
    ]);
});

# OrderItems::EVENT_CREATE_ORDER_ITEM

Wordt getriggerd voor elk line item dat wordt omgezet naar een Sendcloud-orderitem.

  • Event class: white\commerce\sendcloud\events\OrderItemEvent
  • Eigenschappen:
    • $event->lineItem (craft\commerce\models\LineItem)
    • $event->orderItem (white\commerce\sendcloud\models\OrderItem)

Voorbeeld (SKU aan de geëxporteerde itemnaam toevoegen):

Event::on(OrderItems::class, OrderItems::EVENT_CREATE_ORDER_ITEM, static function(OrderItemEvent $event): void {
    $sku = $event->lineItem->getSku();
    if (!empty($sku)) {
        $event->orderItem->setName($event->orderItem->getName() . ' [' . $sku . ']');
    }
});

# OrderSync::EVENT_AFTER_VALIDATE_ORDER

Wordt getriggerd nadat de plugin heeft gevalideerd of een order gesynchroniseerd kan worden.

  • Event class: white\commerce\sendcloud\events\ValidateOrderEvent
  • Eigenschappen:
    • $event->order (craft\commerce\elements\Order)
    • $event->isValid (bool)

Voorbeeld (pickup-orders overslaan):

Event::on(OrderSync::class, OrderSync::EVENT_AFTER_VALIDATE_ORDER, static function(ValidateOrderEvent $event): void {
    $event->isValid = $event->order->shippingMethodHandle !== 'pickup'; // voorkom sync van pickup-orders
});

Deze handleiding wordt je aangeboden door WHITE Digital Agency. Bezoek white.nl om meer van ons werk te zien.