0

「sales_order_place_after」イベントでイベント オブザーバーを作成しました。これは、ユーザーが Magento のチェックアウトで注文したときに発生します。そのイベントはオブザーバーをトリガーします。オブザーバーは次の情報を取得する必要があり、それが外部の在庫管理システムに送信されます。

必要な情報:注文のすべての製品の SKU と数量

以下に、オブザーバー モデルの一部を含めました。注文オブジェクトにアクセスしています。注文したすべての商品を入手できますが、注文を構成するすべての商品の SKU を取得するにはどうすればよいですか。たとえば、単純な製品の場合、これは非常に簡単です。 ただし、バンドルされた製品または構成可能な製品では、そのバンドルされた製品を構成する子に SKU と数量でアクセスする方法がわかりません。 これは、バンドルされた製品と構成可能な製品の両方に必要な情報です。選択された子の SKU と数量が必要です。私の人生では、その情報にアクセスするためにどのメソッドを呼び出すべきかわかりません。次のようなものがあればいいのに:$item->getBundleChildrenSkuQuantity();

$order = $observer->getEvent()->getOrder();
    $joomecomPacket = array();

    if ($order->getTotalItemCount() > 0) {
        $items = $order->getAllItems();

        foreach ($items as $item) {
            $productType = $item->getProductType();

            switch ($productType) {
                case 'bundle':

                break;
                case 'configurable':

                default: // simple products
                    if (isset($joomecomPacket[$item['sku']])) {
                        $joomecomPacket[$item['sku']] += $item['qty_ordered'];
                    } else {
                        $joomecomPacket[$item['sku']] = $item['qty_ordered'];
                    }
                break;
            }
        }
    }
4

2 に答える 2

0

これを試して:

$items = $order->getAllVisibleItems(); // gives only parent items

foreach ($items as $item){

$childItem = $item->getChildren(); //do something with $cildItem like $childItem->getSku() etc...

}
于 2013-01-07T23:34:59.377 に答える