Ürün Veri ve Katalog Kancaları

1.6k görüntülenme Markdown

Ürün verisi, katalog, kart listeleri ve stoğun sekiz kancası.

Genel Bakış

Ürün verisi iki yönde akar: yazılırken kayıt filtresinden, okunurken okuma filtresinden geçer. İkincisi sıcak bir yoldur ve sonucu önbelleğe girer.

Kalanlar müşterinin gördüğü listeleri kurar: katalog planları, ilgili ürünler, yazılım kartları. Stok kancası ise tek başına durur; onu yönetici değil, sipariş hareket ettirir.

Referans

Kaydedilecek ürün verisini değiştirme

filterproduct.save_data
AdminProducts bağla geçer

Ürün verisi yazılmadan önce çalışır. Fiyat politikasını tek yerden dayatmanın yolu budur.

Parametreler 2
$inputarraybağlaYazılacak veri: tipi, ayarları, modül verisi, dilleri, fiyatlandırması ve vergisi.
$detailarrayDeğişiklik öncesi mevcut kayıt.
Dönüş 1
voidDönüş yoksayılır; verinin üzerine yazarsınız.
Dinleyici
Hook::add('filter:product.save_data', 10, function (&$input, $detail) {
    // Fiyat politikasini tek yerden dayatın.
    $input['pricing'] = Acme::applyMargin($input['pricing'] ?? []);
});

Okunan ürünü değiştirme

filterproduct.get
Products::get sonuç önbelleğe girer

Bir ürün veritabanından okunduktan sonra çalışır. Her ürün okuması buradan geçer: katalog, sepet, hizmet detayı.

Parametreler 2
$productarraybağlaÇözülmüş ürün satırı, ayarları ve modül verisi açılmış hâliyle. Ürün bulunamadıysa boş dizi gelir; erişmeden önce bakın.
$contextarraySorgulanan ürünün kimliği ve dil.
Dönüş 1
voidDönüş yoksayılır; ürünün üzerine yazarsınız. 🔴 Değiştirdiğiniz dizi önbelleğe alınır: buradaki bir hata tek bir okumada değil, sonraki bütün okumalarda görünür.
Dinleyici
Hook::add('filter:product.get', 10, function (&$product, $context) {
    // Bulunamayan urun BOS dizi gelir.
    if (!$product) return;

    $product['acme_badge'] = Acme::badgeFor((int) ($context['id'] ?? 0));
});

Ürün yapılandırma alanlarını değiştirme

filterproduct.config_options
AdminProducts boş kalırsa form yok

Modülün sunduğu yapılandırma alanları görünmeden önce çalışır.

Parametreler 3
$config_optionsarraybağlaGörünecek alan tanımları.
$moduleobjectÜrün modülünün örneği.
$module_dataarrayÜrünün mevcut modül verisi.
Dönüş 1
voidDönüş yoksayılır; tanımların üzerine yazarsınız. Filtreden sonra dizi boş kalırsa form hiç görünmez: alanları temizlemek formu ortadan kaldırmak demektir.
Dinleyici
Hook::add('filter:product.config_options', 10, function (&$config_options, $module, $module_data) {
    // Diziyi bosaltmak formu tamamen kaldirir.
    unset($config_options['legacy_option']);
});

Katalog planlarını değiştirme

filterproduct.catalog_plans
website/products bağla geçer

Katalog sayfasındaki plan listesi hazırlandıktan sonra çalışır. Sıralama, gizleme ve rozet eklemenin yeri burasıdır.

Parametreler 2
$plansarraybağlaPlan listesi.
$ctxarrayBağlam: kategori, ürün türü ve yerleşim.
Dönüş 1
voidDönüş yoksayılır; verinin üzerine yazarsınız.
Dinleyici
Hook::add('filter:product.catalog_plans', 10, function (&$plans, $ctx) {
    $plans = Acme::sortByPopularity($plans);
});
filterproduct.related_products
website/products bağla geçer

Ürün detayının altındaki ilgili ürün listesi kurulduktan sonra çalışır. Çekirdek varsayılanı aynı katalogdan en çok dört üründür.

Parametreler 2
$relatedarraybağlaKart listesi.
$idintbağlaGörüntülenen ürünün kimliği; “neyle ilgili” bağlamı budur.
Dönüş 1
voidDönüş yoksayılır; verinin üzerine yazarsınız.
Dinleyici
Hook::add('filter:product.related_products', 10, function (&$related, &$id) {
    $related = Acme::recommendFor($id) ?: $related;
});

Yazılım kart listesini değiştirme

filterproduct.software_list
website/products bağla geçer

Yazılım mağazasının kart listesi hazırlandıktan sonra çalışır.

Parametreler 2
$outarraybağlaKart listesi; her kart başlığını, kategorisini, görselini ve etiketlerini taşır.
$ctxarrayBağlam: kartların fiyatlandığı para birimi. Para birimi ziyaretçiye göre değişir: fiyat üretiyorsanız bu değeri kullanın, varsayılanı değil.
Dönüş 1
voidDönüş yoksayılır; verinin üzerine yazarsınız.
Dinleyici
Hook::add('filter:product.software_list', 10, function (&$out, $ctx) {
    // Fiyat uretiyorsaniz baglamdaki para birimini kullanin.
    $out = Acme::attachOffers($out, (int) ($ctx['currency'] ?? 0));
});

Stok değişimini izleme

actionproduct.stock_changed
Orders siparişe bağlı

Bir ürünün stoğu değiştiğinde çalışır. Değişim elle yapılmaz: stoğu bir sipariş hareket ettirir. Sipariş ödendiğinde ya da etkinleştiğinde stok düşülür; beklemeye döndüğünde, iptal edildiğinde ya da silindiğinde geri verilir. Bir sipariş aynı adetleri iki kez düşmez, iki kez geri vermez.

Parametreler 4
$product_idintÜrünün kimliği.
$deltaintDeğişim yönü: eksi bir bir sipariş için bir adet düşüldü, artı bir bir adet geri verildi. Birden çok adet, her biri için ayrı çağrıyla gelir.
$new_stockintYazılan yeni stok. Sıfırın altına düşmez: eksi bir değer beklemeyin.
$order_idintDeğişimi tetikleyen sipariş.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:product.stock_changed', 10,
    function ($product_id, $delta, $new_stock, $order_id) {
        // Stok sifirin altina inmez.
        if ($new_stock === 0) Acme::alertOutOfStock($product_id);
    });

Ülke bazlı mesaj fiyatını değiştirme

filterproduct.intl_sms_country_pricing_save
AdminProducts bağla geçer

Uluslararası kısa mesaj fiyatları kaydedilmeden önce çalışır.

Parametreler 1
$current_listarraybağlaÜlke kodu karşılık fiyat haritası: maliyet, satış tutarı, para birimi ve durum.
Dönüş 1
voidDönüş yoksayılır; verinin üzerine yazarsınız.
Dinleyici
Hook::add('filter:product.intl_sms_country_pricing_save', 10, function (&$current_list) {
    foreach ($current_list as $code => $row)
        $current_list[$code]['amount'] = Acme::markup((float) ($row['cost'] ?? 0));
});

Tuzaklar

Okuma filtresinin sonucu önbelleğe girer

Ürün okuma filtresinde yaptığınız değişiklik saklanır ve sonraki okumalarda geri gelir. Buradaki bir hata tek bir sayfada değil, önbellek temizlenene kadar her yerde görünür.

Boş bırakılan yapılandırma formu ortadan kaldırır

Yapılandırma alanları filtresinden sonra dizi boşsa form hiç görünmez. Bir alanı gizlemek isterken hepsini temizlemek, yöneticinin ürünü yapılandıramamasına yol açar.

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.