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}_options
là một lựa chọn tốt, trong đó $processMode
chế độ 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_price
như 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);
}
}