Sipariş Durum Kancaları
Sipariş kaydının ömrü boyunca dokuz kanca: kurulum, durum geçişleri, yapılandırma, süre dolumu ve silme.
Genel Bakış
Sipariş, sepetin kalıcı kaydıdır. Durumu hizmetlerin ne zaman açılacağını belirler: bekleyen sipariş hiçbir şey açmaz, etkin sipariş hizmetleri kurar.
Ödenmeden bırakılan sepetler bir süre sonra kendiliğinden düşer. O akışın kendi kancası vardır ve zamanlanmış görevden çalışır.
Referans
Sipariş kaydını durdurma
Sipariş kaydı yazılmadan önce çalışır.
Hook::add('gate:order.create', 10, function ($data) {
if (Acme::blocked((int) ($data['user_id'] ?? 0)))
return 'Bu hesap yeni siparis veremez.';
return null;
});Sipariş kaydını izleme
Sipariş satırı yazıldıktan sonra çalışır. Bağlı hizmetler bu noktada henüz kurulmamıştır.
Hook::add('action:order.created', 10, function ($order) {
// Hizmetler HENUZ kurulmadi: onlar durum etkine dondugunde acilir.
Crm::orderRecord((int) ($order['id'] ?? 0), $order);
});Sipariş durum geçişini durdurma
Sipariş durumu değişmeden önce çalışır.
Hook::add('gate:order.status_change', 10,
function ($order_id, $status, $apply_on_module) {
// Modüle yansimayan gecis hizmet kurmaz: kurali ona gore yazin.
if ($status === 'active' && $apply_on_module && !Acme::capacityFree())
return 'Su an yeni hizmet acilamiyor; kapasite dolu.';
return null;
});Sipariş durumunu izleme
Sipariş durumu değiştikten sonra çalışır.
waiting, inprocess, active, cancelled.Hook::add('action:order.status_changed', 10, function ($id, $status, $old_status) {
// Ilk yazimda eski durum BOS gelir: dogrudan karsilastirma yaniltir.
if ($old_status === '' || $status === $old_status) return;
if ($status === 'active') Crm::orderActivated($id);
});Sipariş güncellemesini izleme
Sipariş kaydı güncellendikten sonra çalışır.
Hook::add('action:order.updated', 10, function ($id, $data) {
Audit::orderEdited((int) $id, array_keys($data));
});Düşen sepeti yakalama
Ödenmeden bırakılan sipariş süresi dolup iptal edildikten sonra çalışır.
Hook::add('action:order.expired', 10, function ($order_id, $ordernum, $user_id) {
// Terk edilmis sepet: geri kazanim icin en dogru an.
Retention::abandoned((int) $user_id, $ordernum);
});Sipariş silmeyi durdurma
Sipariş silinmeden önce çalışır.
Hook::add('gate:order.delete', 10, function ($ids) {
// Tekil silmede bile DIZI gelir.
foreach ($ids as $id)
if (Acme::hasPaidInvoice((int) $id))
return 'Odenmis faturasi olan siparis silinemez.';
return null;
});Sipariş silmeyi izleme
Sipariş silindikten sonra çalışır.
Hook::add('action:order.deleted', 10, function ($id, $order) {
// Kalemler cozulmus gelir: JSON ayristirmaya gerek yok.
Accounting::orderRemoved((int) $id, $order['items'] ?? []);
});Sipariş toplamını değiştirme
Sipariş toplamları hesaplandıktan sonra çalışır.
total, tax_amount, ek vergi ayrıntıları, gösterim ara toplamı. total siparişe kalıcı olarak yazılan tutardır.Hook::add('filter:order.total', 10,
function (&$tax_calc, $subtotal, $total_discount, $items) {
// total siparise KALICI yazilir; vergi anahtarlarina dokunursaniz
// fatura satirlari da ona gore kesilir.
if (Acme::roundUp()) $tax_calc['total'] = ceil((float) $tax_calc['total']);
});Tuzaklar
Sipariş oluşturuldu kancasında durum çoğunlukla bekliyordur ve bağlı hizmetler henüz kurulmamıştır. Hizmete dair iş yapan bir dinleyici burada boş bulur; doğru an durumun etkine döndüğü andır.
Durum olayında önceki durum boş string olabilir: sipariş ilk kez yazılıyordur. "Eskisi şuydu, yenisi bu" diye karşılaştıran bir dinleyici bu durumda yanlış sonuç üretir. Boş değeri ayrı ele alın.
Tek bir sipariş silinirken bile kapı dizi alır. Tek kimlik bekleyen bir dinleyici diziyi sayıya çevirmeye çalışır ve kural hiçbir zaman tutmaz. Her zaman döngüyle gezin.
Durum kapısının üçüncü parametresi, değişikliğin sağlayıcı modülüne yansıtılıp yansıtılmayacağını söyler. Yanlışsa yalnız kayıt değişir: sunucuda hiçbir şey açılmaz. Kapasiteye, sunucuya ya da sağlayıcıya bakan bir kural bu parametreyi okumalıdır.
İlgili Makaleler
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.