나는 그것을 줄 것이다. 한 번에 하나씩 가져 갑시다.
방법 1
$converter=Mage::getModel('sales/convert_order');
$shipment=$converter->toShipment($order);
$converter
위의 클래스는 클래스 세부 사항 에서로드되며,이 클래스 Mage_Sales_Model_Convert_Order
는 copyFieldset
주문 세부 사항을 운송 오브젝트로 복사하기 위해 호출되는 핵심 헬퍼를 사용 합니다. $ order는 array 또는 형식이어야 Varien_Object
합니다.
이 메소드는 Mage::getModel('sales/convert_order')
생성자 호출에서 사용 되는 메소드 3의 핵심입니다 .
이 방법의 주요 차별화 요소-배열 또는 객체를 가져 와서 $order
기본 $shipment
객체를 생성 할 수 있습니다 . 방법 2, 방법 3에 제시된 방법에 의해 독점적으로 사용되는 하위 수준 방법입니다.
방법 2
$shipment = Mage::getModel('sales/service_order', $order)
->prepareShipment($this->_getItemQtys($order));
이는 배송 및 송장 컨트롤러 모두에서 사용되는 배송을 생성하는 마 젠토 코어에서 가장 보편적 인 방법 인 것 같습니다. $order
의 인스턴스화에 대한 생성자 인수로 사용되어 Mage_Sales_Model_Service_Order
객체의 보호 속성으로 설정됩니다.
그런 다음 전화를 걸어 prepareShipment
수량을 전달합니다. 이 메소드는 메소드 1의 변환기 클래스를 사용하므로 여기에서로 호출 되는 인수 에서 주문 항목 전달 항목 운송 수량 세부 사항과 같은 세부 사항을 지정할 필요가 없습니다 . 이를 자신의 상황에서 사용하려면 다음 형식으로 배열의 항목 수량을 전달하면됩니다.prepareShipment
$this->_getItemQtys
array(
'order_item_id'=>$qty,
'order_item_id'=>$qty,
'order_item_id'=>$qty
)
이 방법의 주요 차별화 요소-$ shipment 객체를 반환하지만 모든 항목이 변환됩니다. 플러그 앤 플레이입니다.
방법 3
Core에서이 방법을 사용했다는 증거를 찾을 수 없었습니다. 정직하게 말하면 해킹처럼 보입니다. 방법은 다음과 같습니다.
$itemQty = $order->getItemsCollection()->count();
$shipment = Mage::getModel('sales/service_order', $order)->prepareShipment($itemQty);
$shipment = new Mage_Sales_Model_Order_Shipment_Api();
$shipmentId = $shipment->create($orderId);
1 단계는 위의 방법 2와 정확히 동일합니다. 차이 없음. 그러나 $shipment
개체를 다시 가져 오면이 개체는을 (를) 직접 insantiation으로 대체합니다 Mage_Sales_Model_Order_Shipment_Api
. 이것은 비표준입니다. 배송 Api 객체를 얻는 가장 좋은 방법은을 호출하는 것 Mage::getModel('sales/order_shipment_api')
입니다.
그런 다음 덮어 쓴 새로운 Shipment API 객체를 사용 $orderId
하여 코드에 정의되지 않은 변수 에서 발송물을 만듭니다 . 다시 말하지만 이것은 해결 방법처럼 보입니다.
보면 Mage_Sales_Model_Order_Shipment_Api::create()
선적을 만드는 데 필요한 가장 기본적인 세부 사항은 순서대로, 그것은 선적을 생성하기위한 원 스톱 상점처럼 보인다 increment_id
.
이것은 모듈이나 확장 프로그램에서 사용해서는 안되는 해킹입니다. 이 API는 XML RPC / SOAP API 요청을 통해 노출되는 기능에 사용되며 의도적으로 기본적으로 여러 단계 API 요청을 제거하는 데 사용됩니다.
결국 방법 3은 가장 중요하지만 Mage_Sales_Model_Order에 대한 호출을 통해 prepareShipment
위의 익숙한 방법 2에 대한 상위 추상화 인을 호출합니다 .
public function prepareShipment($qtys = array())
{
$shipment = Mage::getModel('sales/service_order', $this)->prepareShipment($qtys);
return $shipment;
}
주요 차별화 요소 -발송물이 필요한 경우 핵을 신경 쓰지 않고 increment_id 만있는 경우이 방법을 사용하십시오. SOAP API를 통해이를 처리하려는 경우에도 유용한 정보입니다.
도움이 되길 바랍니다.