Tạo tùy chọn và giải thưởng để chỉ thêm sản phẩm vào giỏ hàng bằng cách sử dụng trình quan sát


15

Tôi muốn thêm tùy chọn tùy chỉnh vào quoteitem bằng cách sử dụng trình quan sát mà người quan sát kiểm traCart ProducttAddAfter sự kiện và kích hoạt sau khi sản phẩm được thêm vào giỏ hàng.

public function checkoutCartProductAddAfter(Varien_Event_Observer $observer)
{

 $item = $observer->getQuoteItem();  
  $item->addOption(new Varien_Object(
            array(
                    'product' => $item->getProduct(),
                    'label' => 'Free Gifts',
                    'value' => 'Spend $50 and get gift product worth $9.99'
                 )
        ));
    return;

}

Người quan sát của tôi đang làm việc nhưng tôi không thể thêm tùy chọn tùy chỉnh cho sản phẩm đã thêm. vui lòng cung cấp trợ giúp để thêm tùy chọn tùy chỉnh bằng cách sử dụng trình quan sát để chỉ thêm sản phẩm.


cũng cung cấp cho tôi để thay đổi giá tùy chỉnh của sản phẩm trong người quan sát. tôi muốn thêm giá tùy chỉnh bằng không. cảm ơn trước
Keyur Patel 13/03/13

Câu trả lời:


19

@Tim đã nói chuyện về vấn đề này vào cuối tuần: https://docs.google.com/presentation/d/1efPznQSVTrT1HAD1xQvCPC-Tgvr8jYok4X7ZEJhm9jE/edit

Những gì bạn muốn là Phương pháp 2: Thêm sự kiện sau trong tệp cấu hình

<sales_quote_collect_totals_before>
<observers>
<hackathon_presentation>
<type>singleton</type>
<class>modulename/observer</class>
<method>salesQuoteAddressCollectTotalsBefore</method>
</hackathon_presentation>
</observers>
</sales_quote_collect_totals_before>

Trong Observer.php thêm phương thức sau

   public function salesQuoteAddressCollectTotalsBefore($observer)
    {
        $quote = $observer->getQuote();
        $quote_items = $quote->getItemsCollection();
        foreach ($quote_items as $item) {
            $additionalOptions = array(
                array(
                    'code'  => 'my_code',
                    'label' => 'This text is displayed through additional options',
                    'value' => 'ID is ' . $item->getProductId() . ' and SKU is ' . $item->getSku()
                )
            );
            $item->addOption(
                array(
                     'code'  => 'additional_options',
                     'value' => serialize($additionalOptions),
                )
            );
        }
    }

Đây là nhiều hơn về chủ đề này:

/programming/9334115/magento-change-custom-option-value-b Before-adding-it-to-cart / 9344336 # 9344336

và hơn thế nữa:

/programming/9412074/magento-quote-order-product-item-attribution-basing-on-user-input/9496266#9496266


1
Đầu tiên: Vui lòng sử dụng ý kiến, thay vì câu trả lời mới. Và sau đó chèn một kiểm tra cho sản phẩm của bạn trong vòng lặp, vì vậy chỉ có sản phẩm bạn muốn có tùy chọn.
Fabian Blechschmidt

1
Xin hãy xem câu trả lời gỡ lỗi tuyệt vời này và nhận xét lại: magento.stackexchange.com/a/429/217
Fabian Blechschmidt

1
Điều này có thể thực hiện được với các bước được mô tả ở trên
Fabian Blechschmidt

2
Cảm ơn bạn đã gợi ý Khi tôi thêm vào giỏ hàng, tôi có hai mục vì tôi đang sử dụng sản phẩm có thể định cấu hình và tôi đã giải quyết vấn đề bằng cách cập nhật mục báo giá cuối cùng.
Milople Inc

1
Tôi cũng vậy, nhưng tôi đã cập nhật liên kết. Cảm ơn!
Fabian Blechschmidt

3

Sự kiện thích hợp để thêm tùy chọn tùy chỉnh khi đang di chuyển catalog_product_type_prepare_full_options, được kích hoạt ngay trước khi sản phẩm có tùy chọn tùy chỉnh được chuyển đổi thành mục báo giá.

Nếu dữ liệu buyRequest của riêng có ảnh hưởng đến các thuộc tính hoặc tùy chọn sản phẩm, thì người quan sát sự kiện catalog_product_type_prepare_{$processMode}_optionslà một lựa chọn tốt, trong đó $processModechế độ xác thực và có thể là „toàn bộ hoặc“ lite. Chế độ full đầy đủ được sử dụng khi một sản phẩm thường xuyên được thêm vào giỏ hàng và xác thực nếu tất cả các tùy chọn bắt buộc được đặt và toàn bộ cấu hình hợp lệ. Trong chế độ ưu đãi chỉ có các tùy chọn có trong yêu cầu được xác thực, nó được sử dụng khi thêm sản phẩm vào danh sách mong muốn, nhưng cũng có thể khi tạo đơn hàng từ phụ trợ. Để xử lý dữ liệu trong mọi trường hợp, bạn có thể đăng ký người quan sát cho cả hai sự kiện. Nếu có xác nhận, bạn nên phân biệt các sự kiện của khóa học.

Các sự kiện được kích hoạt trong Mage_Catalog_Model_ Productt_Type_Abauge :: _ readyOptions () và các tham số sau có sẵn:

  • transport: Đối tượng vận chuyển cho tất cả các tùy chọn tùy chỉnh (nhưng không có tùy chọn nào khác, ví dụ tùy chọn gói), vì vậy bạn có thể thay đổi chúng trong trình quan sát. tùy chọn vận chuyển-> là một mảng ở dạng tùy chọn_id => tùy chọn_value. Chú ý, vận chuyển chính nó là một đối tượng stdClass, không phải là một thể hiện của Varien_Object, như bạn có thể mong đợi. Vì vậy, không có phương thức getter và setter cho các tùy chọn vận chuyển->.
  • buy_request: Đối tượng buyRequest, bạn có thể đọc nó ở đây và vẫn sửa đổi nó.
  • product: Sản phẩm sẽ được chuyển đổi thành một mục báo giá sau này. Tại đây bạn có thể thao tác các thuộc tính hoặc thêm chúng một cách linh hoạt. Nhưng bạn vẫn cần xem xét chúng trong quá trình chuyển đổi. Sự kiện được sử dụng cho việc này sales_quote_product_add_after, chỉ được kích hoạt sau.

Nguồn: Magento buyRequest Object - Tài liệu tham khảo

Vì vậy, một người quan sát có thể trông như thế này:

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';
    }
}

Bạn không thể đặt giá cho tùy chọn tùy chỉnh được thêm động này, nhưng bạn có thể thay đổi giá của mục trích dẫn bằng cách sử dụng trình quan sát thứ hai catalog_product_get_final_pricenhư sau:

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);
    }
}
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.