0

バンドルされた製品をプログラムで作成し、選択およびオプション データを追加することもできますが、製品がフロント エンドに表示されないという問題があります。管理者からフィールドを変更せずにその製品を保存すると、表示され始めます。

私は立ち往生していて、どうすればよいかわかりません。何か考えがあれば助けてください。以下はコードが使用されています

    $storeID = 0;
$websiteIDs = array(1);
$cats = array(19);

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

/** @var $productCheck Mage_Catalog_Model_Product */
$productCheck = Mage::getModel('catalog/product');

$p = array(
        'sku_type' => 1, //0 = dynamic, 1 = fixed
        'sku' => '687',
        'name' => "BarProduct",
        'description' => 'Foo',
        'short_description' => 'Bar',
        'type_id' => 'bundle',
        'attribute_set_id' => 4,
        'weight_type' => 0, //0 = dynamic, 1 = fixed
        'visibility' => 4,
        'price_type' => 0, //0 = dynamic, 1 = fixed
        'price_view' => 0, //0 = as low as, 1 = price range <---- DOES NOT SEEM TO HAVE ANY EFFECT
        'status' => 1,
        'category_ids' => $cats,
        'store_id' => $storeID,
        'website_ids' => $websiteIDs
);

$productCheck->setData($p);
Mage::register('product', $productCheck);

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

$optionRawData = array();
$ChildProduct = array(1,2);
$i = 0;
foreach ($ChildProduct as $child){
    $optionRawData[$i] = array(
            'required' => 1,
            'option_id' => '',
            'position' => 0,
            'type' => 'select',
            'title' => 'FooOption',
            'default_title' => 'FooOption',
            'delete' => '',
    );

    $selectionRawData[$i][0] = array(
            'product_id' => $child,
            'selection_qty' => 1,
            'selection_can_change_qty' => 0,  // 1-> yes, 0 -> no
            'position' => 0,
            'is_default' => 1,
            'selection_id' => '',
            'selection_price_type' => 0,
            'selection_price_value' => 0.0,
            'option_id' => '',
            'delete' => ''
    );

$i++;
}

Mage::register('productCheck', $productCheck);
Mage::register('current_product', $productCheck);
$productCheck->setCanSaveConfigurableAttributes(false);
$productCheck->setCanSaveCustomOptions(true);
$productCheck->setCanSaveBundleSelections(true);
// Set the Bundle Options
$productCheck->setBundleOptionsData($optionRawData);
//set option data
$productCheck->setBundleSelectionsData($selectionRawData);

$productCheck->setAffectBundleProductSelections(true);

$productCheck->save();
4

2 に答える 2

0

製品は「在庫あり」で、管理パネルに少なくとも「1」の数量がありますか? コードでこれらの値を設定していないようです。このスニペットをコードに追加します。

$product->setStockData(array(
    'is_in_stock' => 1,
    'qty' => 1
));
于 2013-09-25T10:17:27.967 に答える
0

これを試して...

        $storeID = 1;
        $websiteIDs = array(1);
        $cats = array(13);

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

        $productCheck = Mage::getModel('catalog/product');
        $p = array(
            'sku_type' => 0,
            'sku' => 'test-sku',
            'name' => 'test product',
            'description' => 'test product',
            'short_description' => 'test product',
            'type_id' => 'bundle',
            'attribute_set_id' => 4,
            'weight_type' => 0,
            'visibility' => 4, //visibility : catalog, search
            'price_type' => 0,
            'price_view' => 0,
            'status' => 1,
            'created_at' => strtotime('now'),
            'category_ids' => $cats,
            'store_id' => $storeID,
            'website_ids' => $websiteIDs
        );
        $productCheck->setData($p);
        Mage::register('product', $productCheck);

        $in_featured_products = array('0'=>'4','1'=>'7'); // these are child products ids ... obviously existing products but not bundle type

        $optionRawData = array();
        $selectionRawData = array();
        $count = 0;
        foreach($in_featured_products as $_child){

            $optionRawData[$count] = array(
                'required' => 1,
                'option_id' => '',
                'position' => 0,
                'type' => 'select',
                'title' => 'test product option',
                'default_title' => 'test product option',
                'delete' => '',
            );

            $selectionRawData[$count][] = array(
                'product_id' => $_child,
                'selection_qty' => 1,
                'selection_can_change_qty' => 1,
                'position' => 0,
                'is_default' => 1,
                'selection_id' => '',
                'selection_price_type' => 0,
                'selection_price_value' => 0.0,
                'option_id' => '',
                'delete' => ''
            );
            $count++;
        }
        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();
于 2015-08-05T05:02:56.063 に答える