1
我需要为Magento中的每个产品单元创建一个新的order_item项目。我的意思是,如果某人购买了同一产品的两个单元,那么我需要在sales_flat_order_item表中创建两行,每行的数量为1。在Magento中为每个产品单元创建新订单项目
这可能吗?
谢谢!
我需要为Magento中的每个产品单元创建一个新的order_item项目。我的意思是,如果某人购买了同一产品的两个单元,那么我需要在sales_flat_order_item表中创建两行,每行的数量为1。在Magento中为每个产品单元创建新订单项目
这可能吗?
谢谢!
这是一个解决方法。这是有限的,它应该纠正,因为我不知道它是否考虑到促销和其他特殊规则。它用qty> 1展开订单商品,并用qty = 1创建新行;
与检查sales_order_place_after观察者创建模块:
<events>
<sales_order_place_after>
<observers>
<explodeitems>
<type>singleton</type>
<class>Company_OrderObservers_Model_ExplodeOrderItem</class>
<method>explodeOrderItems</method>
</explodeitems>
</observers>
</sales_order_place_after>
<events>
观察者得到IDS /数量和删除当前订单项目。然后,它创建我们得到的参数新:
function explodeOrderItems($observer)
{
$order= $observer->getEvent()->getOrder();
$items = $order->getAllVisibleItems();
$products = array();
foreach ($items as $k => $item)
{
if ($item->getProductType() == Mage_Catalog_Model_Product_Type::TYPE_SIMPLE)
{
$itemqty = $item->getQtyOrdered();
if ($itemqty > 1)
{
for ($i=0; $i < $itemqty; $i++)
{
$products[$i]['id'] = $item->getProductId();
$products[$i]['qty'] = 1;
}
$item->delete();
}
}
else
$item->delete();
}
$customer = Mage::getSingleton('customer/session')->getCustomer();
$storeId = $customer->getStoreId();
if ($products)
{
foreach ($products as $product)
{
$_product = Mage::getModel('catalog/product')->load($product['id']);
$price = $_product->getPrice();
$orderItem = Mage::getModel('sales/order_item')
->setStoreId($storeId)
->setQuoteItemId(0)
->setQuoteParentItemId(NULL)
->setProductId($product['id'])
->setProductType($_product->getTypeId())
->setQtyBackordered(NULL)
->setTotalQtyOrdered(1)
->setQtyOrdered(1)
->setName($_product->getName())
->setSku($_product->getSku())
->setPrice($price)
->setBasePrice($price)
->setOriginalPrice($price)
->setRowTotal($price)
->setBaseRowTotal($price);
$order->addItem($orderItem);
}
$order->save();
}
你将不得不重新编写核心来实现这一目标。您也许可能会创建“Item_1,Item_2,Item_3,...”的产品副本。然后在保存到目录之前,通过迭代器循环,使用qty作为计数器,并用“Item_n”产品替换每个产品,并将原来的数量改为1? – ShaunOReilly 2012-02-22 00:05:46
谢谢你的回答,ShaunOReilly,但我想避免重写核心模块...无论如何,谢谢! – PauGNU 2012-02-22 21:28:28
我的意思是重写,就像在扩展核心模块一样,使用你自己的新模块,这样你就不会在物理上改变核心代码。 – ShaunOReilly 2012-02-22 22:09:31