Gözlemci kullanarak sepete yeni eklenen ürüne Özel seçenek ve ödül oluşturma


15

Ben hangi gözlemci checkoutCartProductAddAfter olay ve ürün sepete eklendikten sonra ateşler kullanarak gözlemci kullanarak quoteitem için özel bir seçenek eklemek istiyorum.

public function checkoutCartProductAddAfter(Varien_Event_Observer $observer)
{

 $item = $observer->getQuoteItem();  
  $item->addOption(new Varien_Object(
            array(
                    'product' => $item->getProduct(),
                    'label' => 'Free Gifts',
                    'value' => 'Spend $50 and get gift product worth $9.99'
                 )
        ));
    return;

}

Gözlemcim çalışıyor, ancak eklenen ürüne özel seçenek ekleyemiyorum. lütfen yeni eklenen ürüne gözlemci kullanarak özel seçenek eklemek için yardım sağlayın.


ayrıca gözlemcide ürünün özel fiyatını değiştirmemi sağlıyor. sıfıra özel fiyat eklemek istiyorum. şimdiden teşekkürler
Keyur Patel

Yanıtlar:


19

@Tim hafta sonu bu sorun hakkında bir konuşma yaptı: https://docs.google.com/presentation/d/1efPznQSVTrT1HAD1xQvCPC-Tgvr8jYok4X7ZEJhm9jE/edit

Yöntem 2: Config.xml dosyasına aşağıdaki etkinliği ekleyin

<sales_quote_collect_totals_before>
<observers>
<hackathon_presentation>
<type>singleton</type>
<class>modulename/observer</class>
<method>salesQuoteAddressCollectTotalsBefore</method>
</hackathon_presentation>
</observers>
</sales_quote_collect_totals_before>

Observer.php dosyasında aşağıdaki yöntemi ekleyin

   public function salesQuoteAddressCollectTotalsBefore($observer)
    {
        $quote = $observer->getQuote();
        $quote_items = $quote->getItemsCollection();
        foreach ($quote_items as $item) {
            $additionalOptions = array(
                array(
                    'code'  => 'my_code',
                    'label' => 'This text is displayed through additional options',
                    'value' => 'ID is ' . $item->getProductId() . ' and SKU is ' . $item->getSku()
                )
            );
            $item->addOption(
                array(
                     'code'  => 'additional_options',
                     'value' => serialize($additionalOptions),
                )
            );
        }
    }

Bu konu hakkında daha fazla bilgi:

/programming/9334115/magento-change-custom-option-value-before-adding-it-to-cart/9344336#9344336

ve dahası:

/programming/9412074/magento-quote-order-product-item-attribute-based-on-user-input/9496266#9496266


1
İlk olarak: Lütfen yeni cevaplar yerine yorumları kullanın. Ve sonra döngüde ürününüz için bir kontrol ekleyin, böylece sadece istediğiniz ürün seçeneği alır.
Fabian Blechschmidt

1
Lütfen bu harika hata ayıklama cevabına bir göz atın ve geri yorum yapın: magento.stackexchange.com/a/429/217
Fabian Blechschmidt

1
Bu, yukarıda açıklanan adımlarla mümkündür
Fabian Blechschmidt

2
Öneri için teşekkür ederim Ben sepete eklemek zaman ben yapılandırılabilir ürünü kullanıyorum ve son teklif öğesi güncelleyerek sorunu çözdüğüm için ben iki öğe var.
Milople Inc

1
Ben de, ama bağlantıyı güncelledim. Teşekkürler!
Fabian Blechschmidt

3

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}_optionsiyi bir seçimdir, burada $processModedoğ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);
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.