[英]How do I edit a product attribute using PHP during a cart checkout in Magento?
我有两个关于自定义Magento商店的问题。
当有人购买可下载产品时,我想生成许可证代码并将其包含在发票中。
我在产品的默认属性集中添加了一个名为“license_code”的产品属性,我希望在客户结账时使用php设置其值。
请注意哪些事件可以让我在购买之后但在创建发票之前访问购物车中的产品?
我还需要知道在该事件期间使用什么脚本来设置产品的属性值。
谢谢您的帮助!
可能的事件是sales_order_place_before
或sales_convert_quote_*
。
您无法保存“license_code”属性,因为这会影响所有产品,产品在订购时不会存储它的值。 相反,更好的想法是操纵订单商品的选项。
function salesConvertQuoteItemToOrderItem(Varien_Event_Observer $observer)
{
$orderItem = $observer->getOrderItem();
$options = $orderItem->getProductOptions();
$options['licence_code'] = YOUR-DOWNLOADABLE-CODE-HERE;
$orderItem->setProductOptions($options);
}
稍后检索代码与getProductOptions()
基本上是相同的过程,订单项对象已经在订单视图页面上使用,因此很容易在主题中查找和使用。
好吧,我想我弄清楚了。
我按如下方式设置了我的事件观察者:
<events>
<sales_order_item_save_before>
<observers>
<downloadable_observer>
<class>Licensing_Catalog_Model_Observer</class>
<method>generate_licenses</method>
</downloadable_observer>
</observers>
</sales_order_item_save_before>
</events>
然后我的观察功能如下:
public function generate_licenses($observer)
{
$orderItem = $observer->getEvent()->getItem();
$options = $orderItem->getProductOptions();
$options['licence_code'] = 'YOUR-DOWNLOADABLE-CODE-HERE';
$orderItem->setProductOptions($options);
return $this;
}
非常感谢你的帮助,clockworkgeek!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.