0

構成可能でシンプルな製品をプログラムで作成する magento モジュールを開発しています。次のコードは、構成可能な製品と単純な製品の両方を作成しますが、それらを関連付けません。

$sProduct = Mage::getModel('catalog/product');

$sProduct
    ->setTypeId(Mage_Catalog_Model_Product_Type::TYPE_SIMPLE)
    ->setStatus(Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
    ->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE)
    ->setSku($sku)
    ->setName($name)
    ->setPrice($price)
    ->setAttributeSetId($set_id) //id of set which contains size_range_c attribute
    ->setData("size_range_c", $option_id)
    ->setData("color", $colorId) //another attribute in set but not required
    ->setDescription($description)
    ->setShortDescription($short_description)
    ->setTaxClassId(0);

$sProduct->setStockData(array(
    'is_in_stock' => 1,
    'qty' => $qty
));

$sProduct->save();

$cProduct = Mage::getModel('catalog/product');
$cProduct->setTypeId(Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE)
    ->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH)
    ->setStatus(Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
    ->setSku($csku)
    ->setName($cname)
    ->setPrice($price)
    ->setAttributeSetId($set_id) //same set is used for both configurable and simple product
    ->setUrlKey($url)
    ->setDescription($description)
    ->setShortDescription($short_description)
    ->setTaxClassId(0);

$all_child_products = array();
$all_child_products[$sProduct->getId()] = array(
    $sv = array('attribute_id' => $attrId, //attrbute id of size_range_c
                'label' => $attr_name, //option name
                'value_index' => $option_id, //option_id
                'pricing_value' => 0, 
                'is_percent' => 0)
);

$size_values = array();
$size_values[] = $sv;

$_attributes = Mage::getResourceModel('eav/entity_attribute_collection')
    ->addFieldToFilter('attribute_code', 'size_range_c');
$attribute = $_attributes->getFirstItem(); //get data for size_range_c

$cProduct->setConfigurableProductsData($all_child_products);
$cProduct->setConfigurableAttributesData(array(
    array_merge($attribute->getData(), array('label' => '', 'values' => $size_values))
));

$cProduct->setCanSaveConfigurableAttributes(true);
$cProduct->setCanSaveCustomOptions(true);

$cProduct->save();

基本的に、色ごとに構成可能な製品を作成し、その色のサイズごとに単純な製品を作成して関連付けます。size_range_c 属性は、構成可能な製品と単純な製品の両方に必要です。管理パネルからこれらの製品を見ると、すべて問題ないようです。シンプルな製品を構成可能に手動で関連付けようとしましたが、プログラムで作成された製品は関連製品セクションに表示されません。

4

1 に答える 1

0

単純な製品を構成可能な製品に手動で関連付けようとしましたが、プログラムで作成された製品が関連製品セクションに表示されません。

構成可能な製品は、1つまたは複数の構成可能な属性(この場合はColorなど)を使用して作成されます。構成可能な製品は、同じ属性値、たとえば同じ赤色の2つの製品を関連付けることはできません。また、すべての製品の[フィルターのリセット]をクリックしても、Magentoは[関連製品]セクションに表示されません。設定可能な商品をColor属性の後に作成すると、color属性の値を設定した(colorはnullではない)すべての単純な商品が表示されるため、どの商品にもcolor属性を設定していない商品だと思います。 「関連商品」には商品を表示しません。

単純な製品を構成可能な製品にプログラムで関連付ける簡単な方法は、次のコードを使用することです。

Mage::getResourceModel('catalog/product_type_configurable')->saveProducts($pConfigurable, array($idSimpleProduct));

注:$ pConfigurableは構成可能な製品のインスタンスであり、$idSimpleProductは関連付けたい単純な製品のIDです。また、この機能を使用する前に、単純な製品に色属性を設定しておく必要があります。他の単純な製品がすでに同じ値の色に関連付けられている場合、関連付けは上書きされます。

単純な製品を構成可能な製品(およびマゼントの方法)に関連付ける別の解決策は、コードで見たように、setConfigurableAttributesDataを使用して構成可能な製品モデルインスタンスにデータを設定してからsaveを呼び出すことですが、配列データは不完全だと思いますコードサンプルで。

于 2013-01-05T13:48:44.420 に答える