Ürün Veri ve Katalog Kancaları
Ü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
Ürün verisi yazılmadan önce çalışır. Fiyat politikasını tek yerden dayatmanın yolu budur.
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
Bir ürün veritabanından okunduktan sonra çalışır. Her ürün okuması buradan geçer: katalog, sepet, hizmet detayı.
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
Modülün sunduğu yapılandırma alanları görünmeden önce çalışır.
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
Katalog sayfasındaki plan listesi hazırlandıktan sonra çalışır. Sıralama, gizleme ve rozet eklemenin yeri burasıdır.
Hook::add('filter:product.catalog_plans', 10, function (&$plans, $ctx) {
$plans = Acme::sortByPopularity($plans);
});İlgili ürün kartlarını değiştirme
Ü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.
Hook::add('filter:product.related_products', 10, function (&$related, &$id) {
$related = Acme::recommendFor($id) ?: $related;
});Yazılım kart listesini değiştirme
Yazılım mağazasının kart listesi hazırlandıktan sonra çalışır.
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
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.
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
Uluslararası kısa mesaj fiyatları kaydedilmeden önce çalışır.
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
Ü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.
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.
İlgili Makaleler
- Ürün Kancaları
- Hizmet Kancaları
- Kancalar Nasıl Çalışır
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.