在 Magento 中,如果希望用户下订单时(也就是进行 Place Order 时),进行其它 DB 操作,下面是一种解决方案。不过需要**注意**的是,此种方案不是最好的方案,因为它直接修改了系统 core 下的文件,不便于系统升级,所以在实际使用时,需要特别留意这一点。
测试时使用的 Magento 版本是 1.7.0.2。
首先找到如下文件:
app\code\core\Mage\Sales\Model\Convert\Quote.php
找到 itemToOrderItem 方法(Line 126),在这个方法里就可以进行其它 DB 操作了。例如,修改商品的 Custom Option:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
$options = $item->getProductOrderOptions(); if (!$options) { $options = $item->getProduct()->getTypeInstance(true)->getOrderOptions($item->getProduct()); }
$my_product = Mage::getModel('catalog/product'); $my_product->load($item->getProductId()); $my_options = $options["options"]; $i = 1; foreach ($my_product->getOptions() as $o) { $values = $o->getValues(); foreach ($values as $v) { foreach($my_options as $my_op){ if (strcasecmp($my_op['value'], $v["title"]) == 0){ $v["sort_order"] = 1; $v->setOption($o)->save(); } } } $i++; }
|
FYI:
http://stackoverflow.com/questions/5743456/how-does-magento-save-ordered-products-in-database
http://stackoverflow.com/questions/9785958/get-selected-custom-option-of-a-product-in-a-custom-page-magento