[原创] Magento 下订单时进行其它 DB 操作(例如,修改商品指定的Custom Option)

  在 Magento 中,如果希望用户下订单时(也就是进行 Place Order 时),进行其它 DB 操作,下面是一种解决方案。不过需要[b][color=red]注意[/color][/b]的是,此种方案不是最好的方案,因为它直接修改了系统 core 下的文件,不便于系统升级,所以在实际使用时,需要特别留意这一点。

  测试时使用的 Magento 版本是 1.7.0.2。

  首先找到如下文件:
app\code\core\Mage\Sales\Model\Convert\Quote.php

  找到 itemToOrderItem 方法(Line 126),在这个方法里就可以进行其它 DB 操作了。例如,修改商品的 Custom Option:
    /*
$product = Mage::getModel('catalog/product');
$product->load($item->getProductId());

$i = 1;
foreach ($product->getOptions() as $o) {
$values = $o->getValues();
foreach ($values as $v) {
$rand = 3;
$v["sort_order"] = $rand;
$v->setOption($o)->save();
}
$i++;
}
*/

// .....
$options = $item->getProductOrderOptions();
if (!$options) {
$options = $item->getProduct()->getTypeInstance(true)->getOrderOptions($item->getProduct());
}
// ..... After above lines, you can do whatever you want
// E.g, Modify selected custom option of current product
$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:
[url]http://stackoverflow.com/questions/5743456/how-does-magento-save-ordered-products-in-database[/url]
[url]http://stackoverflow.com/questions/9785958/get-selected-custom-option-of-a-product-in-a-custom-page-magento[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值