1

私はこの例に従っています: Magento programmaticaly create bundle Product

新しい製品を作成するとコードは機能しますが、バンドルされた製品または単純な製品をロードすると機能しません。[編集] 以下のコードを使用してプログラムで作成したバンドル製品をロードし、製品をバンドルに追加できます。GUI で作成したバンドル製品に製品を追加できません。

製品をロードして別の製品とバンドルする方法はありますか?

これが私の現在のコードです:

    $items = array();
$items[] = array(
    'title'     => 'Bundle Option',
    'option_id' => '',
    'delete'    => '',
    'type'      => 'radio',
    'required'  => 1,
    'position'  => 0,
);

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

$selections = $selectionRawData;

$websiteIDs = array(1);
$cats = array(4);

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

// load product
// NOT WORKING
$product = Mage::getModel('catalog/product');
$product->load(127);


// new product
/******
 * THIS WORKS

$p = array(
            'sku_type' => 1,
            'sku' => '123321',
            'name' => "BarProduct",
            'description' => 'Foo',
            'short_description' => 'Bar',
            'type_id' => 'bundle',
            'attribute_set_id' => 4,
            'weight_type' => 0,
            'visibility' => 4,
            'price_type' => 1,
            'price_view' => 0,
            'price' => 1.99,
            'has_options' => 1,
            'required_options' => 1,
            'status' => 1,
            'created_at' => strtotime('now'),
            'category_ids' => $cats,
            'store_id' => 0,
            'website_ids' => $websiteIDs,
            'weight' => 0,
            'weight_type' => 1,
            'delivery_time' => '',
            'generate_meta' => 1,
            'tax_class_id' => 1, //19%
    );
    $product->setData($p);

*****/ 

Mage::register('product', $product);
Mage::register('current_product', $product);

$product->setCanSaveConfigurableAttributes(false);
$product->setCanSaveCustomOptions(true);

$product->setBundleOptionsData($items);
$product->setBundleSelectionsData($selections);
$product->setCanSaveCustomOptions(true);
$product->setCanSaveBundleSelections(true);
$product->setAffectBundleProductSelections(true);

$product->save();

$result['product_name'] = $product->getId();
return $result;
4

3 に答える 3

1

これは、バンドルされた製品にとって重要です。

$product->setData("price_type", 0);

保存する前に、この属性を 0 (動的価格) に設定する必要があります。もちろん、再インデックスが必要です。

于 2013-05-14T13:10:59.660 に答える
0

Just delete all unneeded options like this:

$optionsselectionsmap = array();
        $options = Mage::getModel("bundle/option")->getCollection()->setProductIdFilter($product->getId());
        foreach($options as $option){
            $selection = Mage::getModel("bundle/selection")->getCollection()->setOptionIdsFilter($option->getId())->getFirstItem();
            $tmp = array();
            $tmp['option_id'] = $option->getId();
            $tmp['selection_id'] = $selection->getData('selection_id');
            $optionsselectionsmap[$selection->getData('sku')] = $tmp;
        }

$deleteoptionids = array();
        foreach($optionsselectionsmap as $k=>$v) $deleteoptionids[] = $v['option_id'];
        foreach($product->getTypeInstance(true)->getOptionsCollection($product) as $deleteitem){
            $deleteitem = $deleteitem->getData();
            $deleteitem['delete'] = 1;
            $bundleOptions[] = $deleteitem;
        }
于 2013-03-01T10:05:49.740 に答える
0

製品インデックスで奇妙なことが起こっていました。すべての製品を削除し、インデックスを修正しましたが、うまく機能しません。

だから、ここに私がプロセスから集めたものがあります:

2 つの単純な製品をバンドルしたい場合は、$p = array上記のコードを使用して新しいバンドルされたバンドル製品を作成し、両方の単純な製品を追加する必要があります。

それ以外の場合は、magento GUI を介して事前に作成されたバンドル製品が必要になります。次に、$product->load(product_id) コマンドを使用してその製品を起動し、単純な製品をそれに追加します。

于 2013-02-25T23:35:58.720 に答える