Anında özel seçenekler eklemek için uygun olay, özel seçenekleriyle catalog_product_type_prepare_full_options
ürünün bir teklif öğesine dönüştürülmesinden hemen önce tetiklenir.
Kendi buyRequest verilerinin ürün özellikleri veya seçenekleri üzerinde etkisi varsa, olaydaki bir gözlemci catalog_product_type_prepare_{$processMode}_options
iyi bir seçimdir, burada $processMode
doğrulama modu ve "tam" veya "lite" olabilir. "Tam" modu, bir ürün sepete düzenli olarak eklendiğinde kullanılır ve gerekli tüm seçeneklerin ayarlandığını ve tüm yapılandırmanın geçerli olup olmadığını doğrular. "Lite" modunda sadece istekte yer alan seçenekler onaylanır, istek listesine bir ürün eklenirken kullanılır, ancak arka uçtan sipariş oluştururken de mümkündür. Her halükarda verileri işlemek için her iki olay için gözlemciyi kaydedebilirsiniz. Doğrulama olması durumunda, elbette olayları ayırt etmelisiniz.
Olaylar Mage_Catalog_Model_Product_Type_Abstract :: _ preparOptions () içinde tetiklenir ve aşağıdaki parametreler kullanılabilir:
transport
: Nesneyi tüm özel seçenekler için taşıyın (ancak paket seçenekleri gibi başka seçenek yok), böylece bunları gözlemcide değiştirebilirsiniz. transport-> options, option_id => option_value biçimindeki bir dizidir. Dikkat, taşıma, beklediğiniz gibi Varien_Object örneği değil, bir stdClass nesnesidir. Bu yüzden taşıma seçenekleri için alıcı ve ayarlayıcı yöntemleri yoktur.
buy_request
: BuyRequest nesnesi, burada okuyabilir ve yine de değiştirebilirsiniz.
product
: Daha sonra bir teklif öğesine dönüştürülecek ürün. Burada nitelikleri değiştirebilir veya dinamik olarak ekleyebilirsiniz. Ancak yine de dönüşüm sürecinde bunları göz önünde bulundurmanız gerekir. Bunun için kullanılan olay sales_quote_product_add_after
, yalnızca daha sonra tetiklenir.
Kaynak: Magento buyRequest Nesnesi - Referans
Yani bir gözlemci şöyle görünebilir:
public function addCustomOption(Varien_Event_Observer $observer)
{
$transport = $observer->getTransport();
if (this_item_should_be_free()) { // implement your condition here
$transport->options['Free Gifts'] = 'Spend $50 and get gift product worth $9.99';
}
}
Bu dinamik olarak eklenen özel seçenek için bir fiyat ayarlayamazsınız, ancak bunun için ikinci bir gözlemci kullanarak teklif öğesinin fiyatını değiştirebilirsiniz catalog_product_get_final_price
:
public function adjustFinalPrice($observer) {
$product = $observer->getProduct();
// Set price to "0" if custom option "Free Gift" has been set
if ($product->getCustomOption('Free Gift')) {
$product->setFinalPrice(0);
}
}