Acara yang tepat untuk menambahkan opsi kustom dengan cepat adalah catalog_product_type_prepare_full_options
, yang dipicu tepat sebelum produk dengan opsi kustomnya dikonversi ke item penawaran.
Jika data buyRequest sendiri berpengaruh pada atribut atau opsi produk, pengamat pada acara tersebut catalog_product_type_prepare_{$processMode}_options
adalah pilihan yang baik, di mana$processMode
mode validasi dan dapat "penuh" atau "lite". Mode "penuh" digunakan ketika suatu produk ditambahkan secara teratur ke troli dan memvalidasi jika semua opsi yang diperlukan ditetapkan dan seluruh konfigurasi valid. Dalam mode "lite" hanya opsi yang terkandung dalam permintaan divalidasi, ini digunakan saat menambahkan produk ke daftar harapan, tetapi juga memungkinkan saat membuat pesanan dari backend. Untuk memproses data dalam hal apa pun Anda dapat mendaftarkan pengamat untuk kedua acara. Jika ada validasi, Anda harus membedakan peristiwa tentu saja.
Peristiwa dipicu dalam Mage_Catalog_Model_Product_Type_Abstract :: _ prepOptions () dan parameter berikut tersedia:
transport
: Transport objek untuk semua opsi khusus (tetapi tidak ada opsi lain, misalnya opsi bundel), sehingga Anda dapat mengubahnya di pengamat. transport-> options adalah array dalam bentuk option_id => option_value. Perhatian, transport itu sendiri adalah objek stdClass, bukan turunan dari Varien_Object, seperti yang Anda harapkan. Jadi tidak ada metode pengambil dan penyetel untuk opsi transport->.
buy_request
: Objek buyRequest, Anda dapat membacanya di sini dan masih memodifikasinya juga.
product
: Produk yang akan dikonversi menjadi item kutipan di kemudian hari. Di sini Anda dapat memanipulasi atribut atau menambahkannya secara dinamis. Tetapi Anda masih perlu mempertimbangkannya dalam proses konversi. Acara yang digunakan untuk ini,, sales_quote_product_add_after
dipicu nanti saja.
Sumber: Objek buyRequest Magento - Referensi
Jadi pengamat mungkin terlihat seperti ini:
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';
}
}
Anda tidak dapat menetapkan harga untuk opsi kustom yang ditambahkan secara dinamis ini, tetapi Anda dapat mengubah harga item penawaran menggunakan pengamat kedua catalog_product_get_final_price
seperti ini:
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);
}
}