2

注文を作成する際にVinaiの次のコードを使用してみましたが、単純な製品でしか機能しません。$buyInfo のキーと値をいじってみましたが、注文が進まないようです。私は何かが欠けているかもしれませんか?

$quote = Mage::getModel('sales/quote')
        ->setStoreId(Mage::app()->getStore('default')->getId());

if ('do customer orders') {
        // for customer orders:
        $customer = Mage::getModel('customer/customer')
                ->setWebsiteId(1)
                ->loadByEmail('customer@example.com');
        $quote->assignCustomer($customer);
} else {
        // for guesr orders only:
        $quote->setCustomerEmail('customer@example.com');
}

// add product(s)
$product = Mage::getModel('catalog/product')->load(8);
$buyInfo = array(
        'qty' => 1,
        // custom option id => value id
        // or
        // configurable attribute id => value id
);
$quote->addProduct($product, new Varien_Object($buyInfo));

$addressData = array(
        'firstname' => 'Test',
        'lastname' => 'Test',
        'street' => 'Sample Street 10',
        'city' => 'Somewhere',
        'postcode' => '123456',
        'telephone' => '123456',
        'country_id' => 'US',
        'region_id' => 12, // id from directory_country_region table
);

$billingAddress = $quote->getBillingAddress()->addData($addressData);
$shippingAddress = $quote->getShippingAddress()->addData($addressData);

$shippingAddress->setCollectShippingRates(true)->collectShippingRates()
                ->setShippingMethod('flatrate_flatrate')
                ->setPaymentMethod('checkmo');

$quote->getPayment()->importData(array('method' => 'checkmo'));

$quote->collectTotals()->save();

$service = Mage::getModel('sales/service_quote', $quote);
$service->submitAll();
$order = $service->getOrder();

バンドルされた構成可能な製品でも機能させる方法について何か考えはありますか? ありがとう!

4

1 に答える 1

1

Budle 製品を作成するには、prodtypeID を「bundle」に設定する必要があります

これは使用しているコードです:

    $__magproduct = new Mage_Catalog_Model_Product();



    // Build the product 
    $__magproduct->setSku(trim($sku_of_product)); 
    $__magproduct->setAttributeSetId('4');# 4 is for default 
    $__magproduct->setTypeId($prodtype); 
    $__magproduct->setName($getprodId->ProductName); 
    //$__magproduct->setCategoryIds(array(42)); # some cat id's, 
    $__magproduct->setWebsiteIDs(array(1)); # Website id, 1 is default 
    //$__magproduct->setDescription($getprodId->Description); 
    //$__magproduct->setShortDescription($getprodId->Description); 
    $__magproduct->setPrice($prodprice); # Set some price

    //Default Magento attribute 
    $__magproduct->setWeight($getprodId->Weight); 

    $__magproduct->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH); 
    $__magproduct->setStatus(1); 
    $__magproduct->setTaxClassId(2); # default tax class 


    $__magproduct->setCreatedAt(strtotime('now')); 

    try { 
    $__magproduct->save(); 

    if (!($stockItem = $product->getStockItem())) {
                $stockItem = Mage::getModel('cataloginventory/stock_item');
                $stockItem->assignProduct($__magproduct)
                          ->setData('stock_id', 1)
                          ->setData('store_id', 1);
            }

            $stockItem->setData('qty', $qty)
                      ->setData('is_in_stock', $isinstock)
                      ->setData('manage_stock', 1)
                      ->setData('use_config_manage_stock', 0)
                      ->save();

        unset($__magproduct,$stockItem);

その後、バンドルされたオプションを挿入します。

$productCheck = Mage::getModel('catalog/product')->loadByAttribute('sku',$getprodId->Code);         
Mage::register('product', $productCheck);









          $position = 0;

          $optionRawData = array();

          $selectionRawData = array();
          $selectionRawData[0] = array();

         foreach ($materials as $material) {
                $material = (array) $material;

                $komponenta = $client->GetProductSimple($material["ProductID"]);
                $komponenta = (array) $komponenta;

                echo "&nbsp;&nbsp;&nbsp;assigned: ".$komponenta["Code"]." ".$komponenta["ProductName"]." ks(".$material["Count"].")<br>\n";  

                $itemSKU = Mage::getModel('catalog/product')->getIdBySku(trim($getprodId->Code));
                $materialSKU = Mage::getModel('catalog/product')->getIdBySku(trim($komponenta["Code"]));

                if (($itemSKU != "") && ($materialSKU != ""))
                    {

                $position++;

$optionRawData[$position] = array(
    'required' => 1,
    'option_id' => '',
    'position' => '',
    'type' => 'radio',
    'title' => 'Komponenta '.$komponenta["ProductName"],
    'default_title' => 'Komponenta '.$komponenta["ProductName"],
    'delete' => '',
);


$selectionRawData[$position][] = array(
    'product_id' => $materialSKU,
    'selection_qty' => $material["Count"],
    'selection_can_change_qty' => 0,
    'position' => 0,
    'is_default' => 1,
    'selection_id' => '',
    'selection_price_type' => 0,
    'selection_price_value' => 0.0,
    'option_id' => '',
    'delete' => ''
);






                    };

                unset($material,$komponenta,$itemSKU,$materialSKU);

         };




Mage::register('productCheck', $productCheck);
Mage::register('current_product', $productCheck);
$productCheck->setCanSaveConfigurableAttributes(false);
$productCheck->setCanSaveCustomOptions(true);
// Set the Bundle Options & Selection Data
$productCheck->setBundleOptionsData($optionRawData);
$productCheck->setBundleSelectionsData($selectionRawData);
$productCheck->setCanSaveBundleSelections(true);
$productCheck->setAffectBundleProductSelections(true);

$productCheck->save();

バンドルされたアイテムは構成可能のように同じではありません!!

于 2013-11-14T13:43:58.673 に答える