`
yhz61010
  • 浏览: 551315 次
  • 来自: -
博客专栏
63c13ecc-ef01-31cf-984e-de461c7dfde8
libgdx 游戏开发
浏览量:11977
社区版块
存档分类
最新评论

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

阅读更多
  在 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:
    /*
    $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:
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
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics