1
Magentoで製品単位ごとに新しいorder_itemラインを作成する必要があります。つまり、誰かが同じ製品を2つ購入した場合、sales_flat_order_itemテーブルに2つの行を作成する必要があります。それぞれ、数量「1」です。Magentoで製品単位ごとに新規注文アイテムを作成
これは可能ですか?
ありがとうございます!
Magentoで製品単位ごとに新しいorder_itemラインを作成する必要があります。つまり、誰かが同じ製品を2つ購入した場合、sales_flat_order_itemテーブルに2つの行を作成する必要があります。それぞれ、数量「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
答えをくれてありがとう、Shaunoreilly、しかし、私はこれのためにコアモジュールを書き直すことを避けたかった...とにかく感謝! – PauGNU
私は、コアモジュールを物理的に変更しないで自分の新しいモジュールを使用して、コアモジュールを拡張するのと同じように書き直すことを意味しました。 – ShaunOReilly