博客

Magento 二次开发系列十三 — 订单部分功能重写,支持显示同个商品的不同model或part

【php教程】Magento 二次开发系列十三 — 订单部分功能重写,支持显示同个商品的不同model或part

本节将介绍订单功能的修改。

上一节我们修改了购物车的商品项功能,当购物车中的商品最终转为订单时,自然也会保存商品信息,所以我们也要对订单进行改造。

1.订单涉及的表为sales_flat_order,和以sales_flat_order开头的关联表,订单商品存在sales_flat_order_item表中;

2.为了支持我们的需求,需要对订单商品表进行修改,新增三个字段,和购物车商品的修改对应(请看上一节),sql脚本如下:

alter table sales_flat_order_item add column compatible_model varchar(255) default null;
alter table sales_flat_order_item add column buy_url varchar(255) default null;

3.步骤2中新增的三个字段的含义是:保存购买商品的model或part值,购买的商品url,三个字段的含义清楚,接下来按计划我们将会把相应的值存到这些字段中;

4.首先想到的是购物车商品存储到订单商品表的逻辑,根据代码逻辑,我们找到了app/local/Mage/Sales/Model/Convert/Quote.php中的itemToOrderItem()方法,这个方法就是将购物车商品转存储到订单商品表中,看下面的代码:

public function itemToOrderItem(Mage_Sales_Model_Quote_Item_Abstract $item)
{
$itemProduct = $item->getProduct();
$buyProductName = $item->getBuyProduct()==”?$item->getName():$item->getBuyProduct(); //获取购买的商品名称,注意这里的名称是包含model或part的名称,通过替换关键词进行替换的,有不明白此处的朋友可以看看前面的章节(开发系列六)
$itemProduct->setData(‘name’,$buyProductName);
$orderItem = Mage::getModel(‘sales/order_item’)
->setStoreId($item->getStoreId())
->setQuoteItemId($item->getId())
->setQuoteParentItemId($item->getParentItemId())
->setProductId($item->getProductId())
->setProductType($item->getProductType())
->setQtyBackordered($item->getBackorders())
->setProduct($itemProduct)
->setBaseOriginalPrice($item->getBaseOriginalPrice())
->setCompatibleModel($item->getCompatibleModel()) //新增的
->setBuyUrl($item->getBuyUrl()) //新增的
;
//reset item name
$item->setData(‘name’,$buyProductName); //新增的
……省略原代码
}
}

5.因为步骤4中我们已经将订单中的商品名称直接赋值为更改过的,所以订单显示无需修改即可按我们希望的那样显示了。

本节小结,我们充分利用了现有功能,只在关键逻辑中稍作修改即可达到要求,如果步骤4.

注:此文为原创,如转载请注明出处。