Saya mendengarkan sales_quote_save_sebelum acara memperhatikan ketika item ditambahkan ke troli. Setelah dipecat, saya beralih melalui opsi item seperti ini:
$quote = $observer->getEvent()->getQuote();
foreach ($quote->getAllItems() as $item) {
$options = $item->getProduct()->getTypeInstance(true)->getOrderOptions($item->getProduct());
foreach($options['options'] as $option) {
if($option['label'] == 'myOptionA') {
// Here I want to change the selected value for the option
}
}
}
Seperti yang Anda lihat, segera setelah opsi tertentu (myOptionA dalam contoh) tercapai, saya ingin mengubah opsi yang dipilih. Jadi katakanlah myOptionA adalah drop down dan memiliki 4 nilai yang mungkin. Jika nilai 1 dipilih, saya ingin menetapkan nilai 4 untuk item itu. Jadi, ketika kereta selesai memuat, ia harus memiliki nilai 4 untuk myOptionA. Bukan hanya namanya, tapi harganya juga. Bagaimana saya bisa melakukan itu?
cart
event-observer
custom-options
pengguna1638055
sumber
sumber
Jawaban:
catalog_product_type_prepare_full_options
Sebagai gantinya, Anda dapat menulis pengamat untuk acara tersebut , yang merupakan acara terakhir dalam proses penambahan ke keranjang sebelum produk ditambahkan ke keranjang dan setelah opsi khusus disiapkan.Di pengamat Anda memiliki parameter berikut tersedia:
transport->options
adalah array dalam formuliroption_id => option_value
. Perhatian, transportasi itu sendiri adalahstdClass
objek, bukan turunan dariVarien_Object
, seperti yang Anda harapkan. Jadi tidak ada metode pengambil dan penyetel untuktransport->options
.buy_request: Objek buyRequest, Anda dapat membacanya di sini dan masih memodifikasinya juga. Itu
Varien_Object
yang mengandung antara lain:opsi: Array opsi khusus dalam bentuk:
Jadi pengamat Anda mungkin terlihat seperti ini:
Bagian pertama (perubahan
$transport
) relevan untuk benar-benar mengubah nilai opsi OPTION_A_ID. Bagian kedua (pengubahan$buyRequest
) adalah opsional, itu hanya akan menghapus semua jejak nilai yang dipilih pelanggan dan jika dia menata ulang pesanan, nilai baru akan segera dipilih karena permintaan beli akan "dieksekusi" dengan parameter yang diubah. Anda harus memutuskan, jika itu yang Anda inginkan.sumber
Jika Anda telah mengatur atribut Anda melalui kode, yaitu menggunakan skrip instalasi - Anda akan menemukan atribut Anda sebagai kolom di bawah
sales_flat_quote_item
.Jika ada, maka memiliki akses ke variabel $ item, Anda harus dapat menggunakan metode ajaib yang berkaitan dengan atribut Anda:
Jika ini masalahnya, maka Anda harus dapat menyederhanakan kode sebagai berikut:
Seperti yang disebutkan, solusi ini hanya akan berhubungan dengan atribut item penawaran yang diatur secara programatik.
sumber