atribut produk untuk mengutip barang dan memesan barang

25

Apa cara yang benar di Magento agar atribut produk tetap bertahan untuk mengutip item dan akhirnya memesan item?

Apakah sesederhana config XML kecil atau itu adalah proses manual melihat sebelum menyimpan acara dan sebagainya?

Marty Wallace
sumber

Jawaban:

21

salah satu caranya adalah dengan menggunakan pengamat dan konverter.

pengamat akan mendapatkan atribut dari produk ke kutipan (menggunakan atribut yang disebut 'test'), dan konverter mendapatkan atribut dari kutipan ke pesanan.

dalam konfigurasi Anda:

<global>
    <fieldsets>
        <sales_convert_quote_item>
            <test>
                <to_order_item>*</to_order_item>
            </test>
        </sales_convert_quote_item>
    </fieldsets>

    <sales>
        <quote>
            <item>
                <product_attributes>
                    <test />
                </product_attributes>
            </item>
        </quote>
    </sales>

    <events>
        <sales_quote_item_set_product>
            <observers>
                <YOUR_MODULE>
                    <class>YOUR_MODULE/observer</class>
                    <method>setTestAttribute</method>
                </YOUR_MODULE>
            </observers>
        </sales_quote_item_set_product>
    </events>
</global>

di pengamat Anda:

public function setTestAttribute(Varien_Event_Observer $observer) {

    $item = $observer->getQuoteItem();
    $product = $observer->getProduct();
    $item->setTest($product->getTest());
    return $this;
}
Laura
sumber
1
Bagus sekali !!!.
philwinkle
6
Peringatan untuk googler masa depan: menghapus folder cache Anda secara manual sebelum menguji ini. Saya menghabiskan berjam-jam menguji banyak variasi pada jawaban ini, membersihkan indeks dan cache melalui backend. Apa pun yang saya lakukan, atribut khusus tidak disimpan ke db, namun mengubah judul quote_item berfungsi dengan baik. Sampai saya membersihkan cache secara manual dengan menghapus / var / cache ... Gila!
Maurice
Saya ingin atribut khusus ini di panel backend juga di sebelah sku di halaman detail pesanan penjualan. Mohon saran, bagaimana cara mencapainya?
inrsaurabh
21

Ini dilakukan dengan menggabungkan pengetahuan Anda tentang pengamat dan config.xml. Config.xml akan mengelola penyediaan definisi atribut khusus pada item penawaran, dan seorang pengamat akan menangani penyimpanan atribut produk ke penawaran ketika ditambahkan ke penawaran.

Dari sana, Anda menggunakan config.xml untuk memanggil definisi fieldset, yang akan menangani konversi dari quote_itemmenjadi order_item.

Pengungkapan penuh: Konten di bawah ini dari Atwix. Tautan di bawah jawabannya.

Pada awalnya, Anda harus menambahkan atribut khusus ke sales->quote->item->product_attributessimpul:

<sales>
    <quote>
        <item>
            <product_attributes>
                <custom_attribute />
            </product_attributes>
        </item>
    </quote>
</sales>

Ini membuat atribut dapat diakses ketika kita akan menyalinnya dari produk untuk mengutip item - yang merupakan langkah kita selanjutnya. Untuk tugas ini pengamat digunakan, dan acara tersebut akan dipanggil sales_quote_item_set_product:

<sales_quote_item_set_product>
    <observers>
        <yourmodule_customattribute>
            <class>yourmodule_customattribute/observer</class>
            <method>salesQuoteItemSetCustomAttribute</method>
        </yourmodule_customattribute>
    </observers>
</sales_quote_item_set_product>

Pengamat:

public function salesQuoteItemSetCustomAttribute($observer)
{
    $quoteItem = $observer->getQuoteItem();
    $product = $observer->getProduct();
    $quoteItem->setCustomAttribute($product->getCustomAttribute());
}

Hal terakhir yang perlu kita perhatikan - adalah mengubah atribut dari quote_itemmenjadi order_item. Dan ini bisa dilakukan dengan XML:

<fieldsets>
    <sales_convert_quote_item>
        <custom_attribute>
            <to_order_item>*</to_order_item>
        </custom_attribute>
    </sales_convert_quote_item>
    <sales_convert_order_item>
        <custom_attribute>
            <to_quote_item>*</to_quote_item>
        </custom_attribute>
    </sales_convert_order_item>
</fieldsets>

Sumber: Atwix (yang penuh dengan kemenangan): http://www.atwix.com/magento/custom-product-attribute-quote-order-item/

Philwinkle
sumber
2
+1. Saya merasa seperti memberi +1 pada diri saya sendiri. Ketika saya hendak mengirimkan sesuatu yang serupa, sebuah pesan muncul: 'pertanyaan ini memiliki jawaban baru'. jadi +1 karena kamu mengetik cepat :)
Marius
Hahaha - itu Atwix, sungguh.
philwinkle
@ philwinkle, Di atas berfungsi dengan baik tetapi menganggap atribut khusus Anda adalah poin produk tergantung pada qty. Jika prod A memiliki 50 poin dan 2 qty, maka total poin harus 50 * 2 = 100. Bagaimana cara menetapkan nilai 100alih-alih 50dalam item kutipan? Jika nilai atribut diperbarui, bagaimana cara menyimpan nilai yang diperbarui itu dan bukan yang ditetapkan dari admin
Slimshadddyyy