При добавлении товара в корзину отрабатывает событие:
Mage::dispatchEvent($eventName, array(
'transport' => $transport,
'buy_request' => $buyRequest,
'product' => $product
));
(скрипт app/code/core/Mage/Catalog/Model/Product/Type/Abstract.php)
Здесь $eventName имеет вид catalog_product_type_prepare_%s_options. Например, в моем случае catalog_product_type_prepare_full_options
Я отлавливаю это событие обсервером, смотрю, есть ли в buy_request некий параметр (в моем случае size), и если есть - записываю его в $product.
Как можно получить доступ к этому объекту $product уже на странице корзины? $this->getItem()->getProduct() и $this->getItem()->getData() возвращают совершенно иные наборы свойств, среди которых нет нужного size
Как получить объект товара, измененный вручную при помещении в корзину?
26.07.2012 16:48
Путем копания кода было выяснено, что сохранять-то как раз надо не в $product, а в $transport->options. Скажите, как можно создать вменяемый объект класса Mage_Catalog_Model_Product_Option и передать в нем опцию с именем size и значением 18? И возможно ли это вообще, если в админке Мадженты у этого продукта нет такой опции? Или имеет смысл ее создать - но для нескольких тысяч товаров создавать список выбора вручную это убиться. В общем, можно ли как-то подсунуть в корзину опцию, созданную на лету?
30.07.2012 15:04
В итоге вышло так: template/checkout/cart/item/default.phtml (шаблон вывода предмета в корзине)
Следующий вопрос - как провернуть такой же фокус в template/email/order/items/order/default.phtml (проще говоря, отсылка письма о совершении заказа), где вместо Mage_Sales_Model_Quote_Item у нас $_item относится к классу Mage_Sales_Model_Order_Item?
$_item = $this->getItem(); // Mage_Sales_Model_Quote_Item $_item $data=$_item->getOptions(); // Mage_Sales_Model_Quote_Item_Option[] $data $data=$data[0]->getData(); $data= unserialize($data['value']); $size=$data['size']; // А вот и нужная нам опция
Следующий вопрос - как провернуть такой же фокус в template/email/order/items/order/default.phtml (проще говоря, отсылка письма о совершении заказа), где вместо Mage_Sales_Model_Quote_Item у нас $_item относится к классу Mage_Sales_Model_Order_Item?