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
});