thuộc tính sản phẩm để báo giá mục và đơn đặt hàng


25

Cách chính xác trong Magento để có một thuộc tính sản phẩm được tự động duy trì để trích dẫn một mục và cuối cùng là đặt hàng là gì?

Nó đơn giản như một XML cấu hình nhỏ hay nó là một quá trình thủ công xem xét trước khi lưu các sự kiện và vv?

Câu trả lời:


21

một cách sẽ là sử dụng một người quan sát và một công cụ chuyển đổi.

người quan sát sẽ có được thuộc tính từ sản phẩm đến trích dẫn (sử dụng một thuộc tính có tên là 'test') và trình chuyển đổi nhận được thuộc tính từ trích dẫn theo thứ tự.

trong cấu hình của bạn:

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

trong người quan sát của bạn:

public function setTestAttribute(Varien_Event_Observer $observer) {

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

1
Làm rất tốt !!!
philwinkle

6
Một cảnh báo cho các nhân viên trong tương lai: xóa thủ công thư mục bộ đệm của bạn trước khi kiểm tra điều này. Tôi đã dành nhiều giờ để kiểm tra nhiều biến thể cho câu trả lời này, xóa các chỉ mục và bộ nhớ cache thông qua phụ trợ. Dù tôi đã làm gì, các thuộc tính tùy chỉnh không được lưu vào db, thay đổi tiêu đề của quote_item tuy nhiên vẫn hoạt động tốt. Cho đến khi tôi xóa bộ nhớ cache theo cách thủ công bằng cách xóa / var / cache ... Crazy!
Maurice

Tôi muốn thuộc tính tùy chỉnh này trong bảng điều khiển phụ trợ cũng như bên cạnh sku trong trang chi tiết đơn hàng. Vui lòng đề nghị, làm thế nào để đạt được?
inrsaurabh

21

Điều này được thực hiện bằng cách kết hợp kiến ​​thức của bạn về trình quan sát và tệp cấu hình. Cấu hình tệp sẽ quản lý việc cung cấp định nghĩa thuộc tính tùy chỉnh trên mục trích dẫn và người quan sát sẽ xử lý lưu thuộc tính sản phẩm vào trích dẫn khi được thêm vào trích dẫn.

Từ đó, bạn sử dụng config.xml để gọi định nghĩa fieldset, sẽ xử lý việc chuyển đổi từ quote_itemsang order_item.

Tiết lộ đầy đủ: Nội dung dưới đây là của Atwix. Liên kết dưới câu trả lời.

Đầu tiên, bạn nên thêm thuộc tính tùy chỉnh vào sales->quote->item->product_attributesnút:

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

Điều này làm cho thuộc tính có thể truy cập khi chúng tôi sẽ sao chép nó từ sản phẩm để trích dẫn mục - đó là bước tiếp theo của chúng tôi. Đối với nhiệm vụ này, người quan sát được sử dụng và sự kiện sẽ được gọi là 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>

Người quan sát:

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

Điều cuối cùng chúng ta cần quan tâm - đó là chuyển đổi thuộc tính từ quote_itemsang order_item. Và điều này có thể được thực hiện với 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>

Nguồn: Atwix (người đầy chiến thắng): http://www.atwix.com/magento/custom-product-attribution-quote-order-item/


2
+1. Tôi cảm thấy như chính mình + 1'd. Khi tôi chuẩn bị gửi một cái gì đó tương tự, một thông báo xuất hiện: 'câu hỏi này có câu trả lời mới'. nên +1 vì bạn gõ nhanh :)
Marius

Hahaha - đó là Atwix, thực sự.
philwinkle

@philwinkle, Phần trên hoạt động tốt nhưng giả sử thuộc tính tùy chỉnh của bạn là điểm sản phẩm tùy thuộc vào qty. Nếu prod A có 50 điểm và 2 qty, thì tổng số điểm phải là 50 * 2 = 100. Làm cách nào để đặt giá trị 100thay vì 50trong mục trích dẫn? Nếu giá trị thuộc tính được cập nhật, làm cách nào để lưu giá trị cập nhật đó chứ không phải bộ được đặt từ quản trị viên
Slimshadddyyy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.