Ürün Yaşam Döngüsü Kancaları

1.8k görüntülenme Markdown

Ürün oluşturma, güncelleme, silme ve satışa açmanın sekiz kancası.

Genel Bakış

Bir ürün üç adımdan geçer: oluşturulur, güncellenir, silinir. Üçünün de önünde durdurabileceğiniz bir kapı, arkasında haber veren bir olay bulunur.

Yanlarında iki durum kancası vardır. Tekil olan ürün başına çalışır; toplu olan listeden çok ürüne birden işlem uygulandığında tek kez çalışır.

Referans

Ürün oluşturmayı durdurma

gateproduct.create
AdminProducts yazımdan önce

Yeni bir ürün oluşturulmadan önce çalışır.

Parametreler 2
$inputarrayForm girdisi: tipi, grubu, kategorisi, adı, modülü ve adresi.
$statearrayBağlam: grup anahtarları, varsayılan para birimi ve dil anahtarları.
Dönüş 1
string|nullBoş olmayan bir metin işlemi engeller ve yöneticiye hata olarak gösterilir. Boş dönüş devam ettirir.
Dinleyici
Hook::add('gate:product.create', 10, function ($input, $state) {
    if (!Acme::namingOk($input['name'] ?? '')) return 'Urun adi kurumsal kaliba uymuyor.';

    return null;
});

Ürün oluşturulmasını izleme

actionproduct.created
AdminProducts sıfır = oluşmadı

Bir ürün oluşturulduktan sonra çalışır.

Parametreler 2
$new_idintYeni ürünün kimliği. ? Sıfır gelirse ürün oluşmamıştır. Kimliği doğrudan kullanan bir dinleyici o durumda var olmayan bir kayda iş yapar.
$inputarrayEkleme girdileri: tipi, grubu, kategorisi, adı, modülü ve adresi.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:product.created', 10, function ($new_id, $input) {
    // SIFIR = urun olusmadi.
    if (!$new_id) return;

    Acme::registerCatalogItem($new_id, $input['name'] ?? '');
});

Ürün güncellemesini durdurma

gateproduct.update
AdminProducts önce ve sonra elinizde

Bir ürün güncellenmeden önce çalışır. Hem yeni veri hem eski kayıt elinizdedir: neyin değiştiğini karşılaştırabilirsiniz.

Parametreler 3
$idintÜrünün kimliği.
$inputarrayYazılacak yeni veri.
$detailarrayDeğişiklikten önceki kayıt.
Dönüş 1
string|nullBoş olmayan bir metin işlemi engeller ve yöneticiye hata olarak gösterilir. Boş dönüş devam ettirir.
Dinleyici
Hook::add('gate:product.update', 10, function ($id, $input, $detail) {
    // Iki kayit da elinizde: farki olcun.
    if (($detail['module'] ?? '') !== ($input['module'] ?? '') && Acme::hasLiveServices($id))
        return 'Uzerinde calisan hizmet varken modul degistirilemez.';

    return null;
});

Ürün güncellemesini izleme

actionproduct.updated
AdminProducts önce ve sonra elinizde

Ürün güncellendikten sonra çalışır.

Parametreler 3
$idintÜrünün kimliği.
$inputarrayDüzenleme girdilerinin tamamı: fiyatlandırma, diller, modül verisi ve kaynak sınırları.
$detailarrayGüncelleme öncesi kayıt.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:product.updated', 10, function ($id, $input, $detail) {
    Acme::syncCatalog($id, $input, $detail);
});

Ürün silmeyi durdurma

gateproduct.delete
AdminProducts yazımdan önce

Bir ürün silinmeden önce çalışır.

Parametreler 2
$idintSilinecek ürünün kimliği.
$detailarrayÜrünün kaydı: tipi, modülü ve grubu.
Dönüş 1
string|nullBoş olmayan bir metin işlemi engeller ve yöneticiye hata olarak gösterilir. Boş dönüş devam ettirir.
Dinleyici
Hook::add('gate:product.delete', 10, function ($id, $detail) {
    if (Acme::hasLiveServices($id)) return 'Bu urunde calisan hizmetler var.';

    return null;
});

Ürün silinmesini izleme

actionproduct.deleted
AdminProducts silme sonrası

Ürün silindikten sonra çalışır.

Parametreler 2
$product_idintSilinen ürünün kimliği.
$detailarrayÜrünün son hâli. Kayıt artık yok: ihtiyacınız olan alanı buradan alın.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:product.deleted', 10, function ($product_id, $detail) {
    Acme::dropCatalogItem($product_id);
});

Ürün durumunun değişmesini izleme

actionproduct.status_changed
AdminProducts tek ürün

Bir ürün satışa açıldığında ya da kapatıldığında çalışır.

Parametreler 2
$product_idintÜrünün kimliği.
$statusstringYeni durum: active ya da inactive.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:product.status_changed', 10, function ($product_id, $status) {
    Acme::setCatalogVisible($product_id, $status === 'active');
});

Toplu işlemi izleme

actionproduct.bulk_action_applied
AdminProducts tek çağrı, çok ürün

Listeden birden çok ürüne birden işlem uygulandığında çalışır. Tekil durum olayının aksine burada tek çağrı gelir, ürün başına değil.

Parametreler 2
$actionstringUygulanan işlem: active ya da inactive.
$idsarrayİşlenen ürünlerin kimlikleri.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:product.bulk_action_applied', 10, function ($action, $ids) {
    // Tek cagri, cok urun: tekil durum olayi burada calismaz.
    Acme::bulkVisibility($ids, $action === 'active');
});

Tuzaklar

Oluşturma olayında sıfır “oluşmadı” demektir

Yeni ürün kimliği sıfır gelebilir; bu, ürünün oluşturulamadığı anlamına gelir. Kimliği doğrudan kullanan bir dinleyici o durumda var olmayan bir kayda iş yapar. İlk satırda kontrol edin.

Toplu işlem tekil durum olayını çalıştırmaz

Listeden çok ürüne birden işlem uygulandığında yalnız toplu olay çalışır. Tekil durum kancasına bağladığınız iş o yolda hiç çalışmaz; ikisini birden dinleyin.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.