在Magento中为每个产品单元创建新订单项
我需要在Magento中为每个产品单元创建一个新的订单项目行。我的意思是,如果有人购买了两台相同的产品,那么我需要订单在sales\u flat\u order\u item表中创建两行,每行的数量为“1” 可能吗在Magento中为每个产品单元创建新订单项,magento,Magento,我需要在Magento中为每个产品单元创建一个新的订单项目行。我的意思是,如果有人购买了两台相同的产品,那么我需要订单在sales\u flat\u order\u item表中创建两行,每行的数量为“1” 可能吗 谢谢 这里有一个解决方法。这是有限的,应该纠正,因为我不知道它是否考虑到促销和其他特殊规则。分解数量大于1的订单项,创建数量=1的新行 创建一个有观察员的模块,在以下情况下检查销售订单地点: <events> <sales_order_place_after>
谢谢 这里有一个解决方法。这是有限的,应该纠正,因为我不知道它是否考虑到促销和其他特殊规则。分解数量大于1的订单项,创建数量=1的新行
<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>
独生子女
公司\订单观察员\型号\订单项
分解订单项
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();
}
函数分解OrderItems($observer)
{
$order=$observer->getEvent()->getOrder();
$items=$order->getAllVisibleItems();
$products=array();
foreach($k=>$item的项目)
{
如果($item->getProductType()==Mage\u Catalog\u Model\u Product\u Type::Type\u SIMPLE)
{
$itemqty=$item->GetQTyorDerred();
如果($itemqty>1)
{
对于($i=0;$i<$itemqty;$i++)
{
$products[$i]['id']=$item->getProductId();
$products[$i]['qty']=1;
}
$item->delete();
}
}
其他的
$item->delete();
}
$customer=Mage::getSingleton('customer/session')->getCustomer();
$storeId=$customer->getStoreId();
如果($产品)
{
foreach($products as$product)
{
$\u product=Mage::getModel('catalog/product')->load($product['id']);
$price=$\产品->获取价格();
$orderItem=Mage::getModel('sales/order\u item')
->setStoreId($storeId)
->setQuoteItemId(0)
->setQuoteParentItemId(空)
->setProductId($product['id']))
->setProductType($\u product->getTypeId())
->setQtyBackordered(NULL)
->SetTotalQtorOrdered(1)
->setQtyOrdered(1)
->setName($\u product->getName())
->setSku($\u产品->getSku())
->设定价格($price)
->价格($price)
->setOriginalPrice(价格)
->setRowTotal(价格)
->挫折总价值($价格);
$order->addItem($orderItem);
}
$order->save();
}
这里有一个解决方法。它是有限的,应该更正,因为我不知道它是否考虑促销和其他特殊规则。它分解数量大于1的订单项目,并创建数量=1的新行
<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>
独生子女
公司\订单观察员\型号\订单项
分解订单项
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();
}
函数分解OrderItems($observer)
{
$order=$observer->getEvent()->getOrder();
$items=$order->getAllVisibleItems();
$products=array();
foreach($k=>$item的项目)
{
如果($item->getProductType()==Mage\u Catalog\u Model\u Product\u Type::Type\u SIMPLE)
{
$itemqty=$item->GetQTyorDerred();
如果($itemqty>1)
{
对于($i=0;$i<$itemqty;$i++)
{
$products[$i]['id']=$item->getProductId();
$products[$i]['qty']=1;
}
$item->delete();
}
}
其他的
$item->delete();
}
$customer=Mage::getSingleton('customer/session')->getCustomer();
$storeId=$customer->getStoreId();
如果($产品)
{
foreach($products as$product)
{
$\u product=Mage::getModel('catalog/product')->load($product['id']);
$price=$\产品->获取价格();
$orderItem=Mage::getModel('sales/order\u item')
->setStoreId($storeId)
->setQuoteItemId(0)
->setQuoteParentItemId(空)
->setProductId($product['id']))
->setProductType($\u product->getTypeId())
->setQtyBackordered(NULL)
->SetTotalQtorOrdered(1)
->setQtyOrdered(1)
->setName($\u product->getName())
->setSku($\u产品->getSku())
->设定价格($price)
->价格($price)
->setOriginalPrice(价格)
->setRowTotal(价格)
->挫折总价值($价格);
$order->addItem($orderItem);
}
$order->save();
}
您必须重写core才能实现这一点。您也可以创建“Item_1、Item_2、Item_3,…”产品的副本,然后在保存到目录之前,通过迭代器循环,使用数量作为计数器,并将每个产品替换为“Item_n”产品,并将原始模块上的数量更改为1?谢谢你的回答,ShaunOReilly,但我想避免为此重写核心模块…无论如何,谢谢!我的意思是重写,就像扩展核心模块一样,使用自己的新模块,这样你就不会实际更改核心代码。谢谢ShaunOReilly,我明白你的意思。不是吗观察者够了吗?(这是我不清楚的一点)。使用观察者可以工作,循环检查每个项目,检查数量,并将其拆分应该不会太难。GetProductItemBySku将尝试返回相同的产品,其中包含1个数量字段。实际上,我将