Ürün Grubu ve Eklenti Kancaları

1.6k görüntülenme Markdown

Grup, kategori, eklenti ve gereksinimlerin yedi kancası.

Genel Bakış

Ürünlerin çevresindeki yapılar burada durur: onları taşıyan gruplar, yanlarında satılan eklentiler ve sipariş sırasında istenen gereksinimler.

İki şekil sürprizi vardır. Grup ayarları bağlama göre dizi ya da metin gelir. Kategori kapısına ise tek kayıt değil bir işlem yığını gelir; içinde silme de bulunabilir.

Referans

Grup verisini değiştirme

filterproduct.group_save_data
AdminProducts ayarlar iki biçimde

Ürün grubu ya da kategorisi kaydedilmeden önce çalışır.

Parametreler 3
$set_dataarraybağlaYazılacak veri: durumu, görünürlüğü, tipi ve ayarları. ? Ayarlar alanının biçimi bağlama göre değişir: sabit grup kaydında dizi, diğerlerinde metindir. Tip denetimi yapmadan dizi gibi okumak hata verir.
$categorystringKategori bağlamı; boşsa üst grup, doluysa kategori türüdür.
$detailarrayMevcut kayıt; yeni kayıtta boştur.
Dönüş 1
voidDönüş yoksayılır; verinin üzerine yazarsınız.
Dinleyici
Hook::add('filter:product.group_save_data', 10, function (&$set_data, $category, $detail) {
    // Ayarlar dizi de olabilir metin de: once tipe bakin.
    if (!is_array($set_data['options'] ?? null)) return;

    $set_data['options']['acme_tag'] = Acme::tagFor($category);
});

Grup kaydını izleme

actionproduct.group_saved
AdminProducts sabit kayıtta sıfır

Ürün grubu ya da kategorisi kaydedildikten sonra çalışır.

Parametreler 3
$idintKaydedilen kaydın kimliği. Sabit kategori kaydında sıfır gelebilir.
$is_newboolDoğruysa yeni oluşturuldu.
$categorystringKategori tipi; boşsa üst gruptur.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:product.group_saved', 10, function ($id, $is_new, $category) {
    // Sabit kategoride id SIFIR gelebilir.
    if ($id) Acme::refreshGroupMenu($id);
});

Grup silmeyi durdurma

gateproduct.group_delete
AdminProducts yazımdan önce

Bir ürün grubu ya da kategorisi silinmeden önce çalışır.

Parametreler 3
$idintSilinecek kaydın kimliği.
$categorystringKategori bağlamı.
$detailarraySilinecek kaydın dil bilgisi, başlığı içinde.
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.group_delete', 10, function ($id, $category, $detail) {
    if (Acme::groupHasProducts($id)) return 'Icinde urun bulunan grup silinemez.';

    return null;
});

Kategori toplu işlemini durdurma

gateproduct.category_save
AdminProducts işlem yığını

Eklenti ya da gereksinim kategorileri kaydedilmeden önce çalışır. Tek bir kayıt değil, bir işlem yığını gelir: aynı istekte ekleme, güncelleme ve silme bir arada bulunabilir.

Parametreler 2
$typestringKategori tipi: addon ya da requirement.
$categoriesarrayUygulanacak işlemler; her biri işlem türünü ve kimliği ya da başlığı taşır. Silme işlemi de bu listede olabilir: yalnız eklemeye bakan bir denetim onu kaçırır.
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.category_save', 10, function ($type, $categories) {
    // Yigin icinde SILME de olabilir: hepsini gezin.
    foreach ($categories as $op)
        if (($op['action'] ?? '') === 'delete' && Acme::categoryInUse((int) ($op['id'] ?? 0)))
            return 'Kullanimda olan kategori silinemez.';

    return null;
});

Eklenti verisini değiştirme

filterproduct.addon_save_data
AdminProducts bağla geçer

Ürün eklentisi kaydedilmeden önce çalışır.

Parametreler 2
$addonDataarraybağlaYazılacak eklenti verisi: kategorisi, durumu, sırası, vergi muafiyeti ve bağlı olduğu ürün.
$detailarrayMevcut kayıt; yeni kayıtta boştur.
Dönüş 1
voidDönüş yoksayılır; verinin üzerine yazarsınız.
Dinleyici
Hook::add('filter:product.addon_save_data', 10, function (&$addonData, $detail) {
    $addonData['status'] = Acme::allowedAddon($addonData) ? ($addonData['status'] ?? 0) : 0;
});

Eklenti silmeyi durdurma

gateproduct.addon_delete
AdminProducts yazımdan önce

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

Parametreler 2
$idintSilinecek eklentinin kimliği.
$detailarrayEklentinin kaydı.
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.addon_delete', 10, function ($id, $detail) {
    if (Acme::addonInUse($id)) return 'Musteride etkin olan eklenti silinemez.';

    return null;
});

Gereksinim silmeyi durdurma

gateproduct.requirement_delete
AdminProducts yazımdan önce

Bir ürün gereksinimi silinmeden önce çalışır. Gereksinimler sipariş sırasında müşteriden istenen bilgilerdir: kaldırmak bekleyen siparişleri etkiler.

Parametreler 2
$idintSilinecek gereksinimin kimliği.
$detailarrayGereksinimin kaydı.
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.requirement_delete', 10, function ($id, $detail) {
    if (Acme::pendingOrdersNeed($id)) return 'Bekleyen siparisler bu gereksinimi kullaniyor.';

    return null;
});

Tuzaklar

Grup ayarlarının biçimi bağlama göre değişir

Ayarlar alanı sabit grup kaydında dizi, diğer durumlarda metin gelir. Tip denetimi yapmadan dizi gibi okumak hata üretir; ilk satırda tipe bakın.

Kategori kapısına yığın gelir, tek kayıt değil

Aynı istekte ekleme, güncelleme ve silme bir arada bulunabilir. Yalnız eklemeye bakan bir denetim, aynı istekteki silmeyi kaçırır.

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.