Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Magento中为每个产品单元创建新订单项_Magento - Fatal编程技术网

在Magento中为每个产品单元创建新订单项

在Magento中为每个产品单元创建新订单项,magento,Magento,我需要在Magento中为每个产品单元创建一个新的订单项目行。我的意思是,如果有人购买了两台相同的产品,那么我需要订单在sales\u flat\u order\u item表中创建两行,每行的数量为“1” 可能吗 谢谢 这里有一个解决方法。这是有限的,应该纠正,因为我不知道它是否考虑到促销和其他特殊规则。分解数量大于1的订单项,创建数量=1的新行 创建一个有观察员的模块,在以下情况下检查销售订单地点: <events> <sales_order_place_after>

我需要在Magento中为每个产品单元创建一个新的订单项目行。我的意思是,如果有人购买了两台相同的产品,那么我需要订单在sales\u flat\u order\u item表中创建两行,每行的数量为“1”

可能吗


谢谢

这里有一个解决方法。这是有限的,应该纠正,因为我不知道它是否考虑到促销和其他特殊规则。分解数量大于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>
    
    
    独生子女
    公司\订单观察员\型号\订单项
    分解订单项
    
  • 观察者获取ID/qty并删除当前订单项。然后用我们得到的参数创建新的:

    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>
    
    
    独生子女
    公司\订单观察员\型号\订单项
    分解订单项
    
  • 观察者获取ID/qty并删除当前订单项。然后使用我们获得的参数创建新订单项:

    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个数量字段。实际上,我将