2012-02-21 2 views
1

Magento에서 제품 단위당 새로운 order_item 행을 작성해야합니다. 내 말은, 만약 누군가가 같은 제품을 두 대 구입했다면, sales_flat_order_item 테이블에 수량이 '1'인 두 줄을 생성하라는 명령이 필요하다는 뜻입니다.Magento에서 제품 단위당 새 주문 항목을 작성하십시오.

그럴 수 있습니까?

감사합니다.

+0

당신이 그렇게 할 수있는 코어를 재 작성해야합니다. "Item_1, Item_2, Item_3, ..."인 제품의 복제본을 만든 다음 카탈로그에 저장하기 전에 qty를 카운터로 사용하여 반복자를 반복하고 각 제품을 "Item_n"제품으로 바꿀 수 있습니다 원래 1의 수량을 1로 변경 하시겠습니까? – ShaunOReilly

+0

답변을 주셔서 감사합니다, Shaunoreilly,하지만 난 이것에 대한 핵심 모듈을 다시 작성하는 것을 피하기 위해 ... 어쨌든 고마워! – PauGNU

+0

핵심 모듈을 확장 할 때와 같이 직접 작성한 새로운 모듈을 사용하여 다시 작성할 때 핵심 코드를 물리적으로 변경하지 마십시오. – ShaunOReilly

답변

1

이렇게하려면이 문제를 해결할 수있는 방법입니다. 제한적이며 계정 승격 및 기타 특별 규칙이 적용되는지 모르겠으므로 수정해야합니다. qty> 1 인 주문 항목을 폭발시키고 qty = 1로 새 줄을 만듭니다.

  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> 
    
  2. 관찰자는 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(); 
    } 
    
관련 문제