คุณลักษณะของผลิตภัณฑ์เพื่ออ้างถึงรายการและรายการสั่งซื้อ


25

วิธีที่ถูกต้องใน Magento ที่จะมีคุณลักษณะของผลิตภัณฑ์จะคงอยู่โดยอัตโนมัติเพื่อเสนอราคาสินค้าและในที่สุดก็จะสั่งซื้อสินค้า?

มันง่ายเหมือน config XML เล็กน้อยหรือเป็นกระบวนการแบบแมนนวลที่ดูก่อนบันทึกเหตุการณ์และอื่น ๆ ?

คำตอบ:


21

วิธีหนึ่งคือการใช้ผู้สังเกตการณ์และตัวแปลง

ผู้สังเกตการณ์จะได้รับคุณลักษณะจากผลิตภัณฑ์ไปยังเครื่องหมายคำพูด (โดยใช้แอตทริบิวต์ที่เรียกว่า 'ทดสอบ') และตัวแปลงได้รับแอตทริบิวต์จากเครื่องหมายคำพูดถึงลำดับ

ในการกำหนดค่าของคุณ:

<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>

ในผู้สังเกตการณ์ของคุณ:

public function setTestAttribute(Varien_Event_Observer $observer) {

    $item = $observer->getQuoteItem();
    $product = $observer->getProduct();
    $item->setTest($product->getTest());
    return $this;
}

1
ทำได้ดีมาก !!!
philwinkle

6
คำเตือนสำหรับผู้ใช้ Google ในอนาคต: ลบโฟลเดอร์แคชของคุณด้วยตนเองก่อนทำการทดสอบ ฉันใช้เวลาหลายชั่วโมงในการทดสอบความหลากหลายของคำตอบนี้การล้างดัชนีและแคชผ่านแบ็กเอนด์ สิ่งที่ฉันทำแอตทริบิวต์ที่กำหนดเองไม่ได้รับการบันทึกไปยัง db การเปลี่ยนชื่อของ quote_item แต่ทำงานได้ดี จนกว่าฉันจะล้างแคชด้วยตนเองโดยการลบ / var / cache ... Crazy!
Maurice

ฉันต้องการแอตทริบิวต์ที่กำหนดเองนี้ในแผงด้านหลังและถัดจาก sku ในหน้ารายละเอียดใบสั่งขาย กรุณาแนะนำวิธีการบรรลุ?
inrsaurabh

21

สิ่งนี้ทำได้โดยการรวมความรู้ของผู้สังเกตการณ์และ config.xml Config.xml จะจัดการการจัดหาคำนิยามของแอตทริบิวต์ที่กำหนดเองในรายการคำพูดและผู้สังเกตการณ์จะจัดการกับการบันทึกคุณสมบัติของผลิตภัณฑ์ไปยังคำพูดเมื่อเพิ่มลงในคำพูด

จากนั้นคุณใช้ config.xml ที่จะเรียกความหมาย fieldset ซึ่งจะจัดการกับการแปลงจากไปquote_itemorder_item

การเปิดเผยแบบเต็ม: เนื้อหาด้านล่างนี้มาจาก Atwix ลิงค์ด้านล่างคำตอบ

ในตอนแรกคุณควรเพิ่มแอตทริบิวต์ที่กำหนดเองไปยัง sales->quote->item->product_attributesโหนด:

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

สิ่งนี้ทำให้คุณสมบัติสามารถเข้าถึงได้เมื่อเราจะคัดลอกจากผลิตภัณฑ์ไปยังรายการอ้างอิง - ซึ่งเป็นขั้นตอนต่อไปของเรา สำหรับภารกิจนี้ผู้สังเกตการณ์จะถูกใช้และเหตุการณ์จะถูกเรียกว่า 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>

สังเกตการณ์:

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

สิ่งสุดท้ายที่เราต้องดูแลเกี่ยวกับ - มันเป็นแปลงแอตทริบิวต์จากไปquote_item order_itemและสิ่งนี้สามารถทำได้ด้วย 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>

ที่มา: Atwix (ผู้ชนะเต็ม): http://www.atwix.com/magento/custom-product-attribute-quote-order-item/


2
+1 ฉันรู้สึกว่าฉัน +1 ด้วยตัวเอง เมื่อฉันกำลังจะส่งบางสิ่งที่คล้ายกัน veeeery ข้อความปรากฏขึ้น: 'คำถามนี้มีคำตอบใหม่' ดังนั้น +1 เพราะคุณพิมพ์ได้อย่างรวดเร็ว :)
Marius

ฮ่าฮ่าฮ่า - มันคือ Atwix จริง ๆ
philwinkle

@philwinkle ข้างต้นทำงานได้ดี แต่สมมติว่าแอตทริบิวต์ที่กำหนดเองของคุณคือคะแนนผลิตภัณฑ์ขึ้นอยู่กับจำนวน หาก prod A มี 50 คะแนนและ 2 จำนวนดังนั้นคะแนนรวมควรเป็น 50 * 2 = 100 ฉันจะตั้งค่า100แทน50รายการอ้างอิงได้อย่างไร หากค่าแอททริบิวได้รับการอัปเดตฉันจะบันทึกค่าที่อัปเดตนั้นได้อย่างไรและไม่ใช่หนึ่งชุดจากผู้ดูแลระบบ
Slimshadddyyy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.