以编程方式将简单产品附加到可配置产品

Oll*_*lli 7 php import join configurable magento

我正在尝试以编程方式将一些现有的简单产品加入到现有的可配置产品中.

我几乎没有找到任何关于此的提示/文档.我检查了MAGMI Magento Mass Importer插件(特别是magmi_productimportengine.php-file)但没有成功.

之后我找到了这个片段:

function attachProductToConfigurable($childProduct, $configurableProduct)
{
    $loader = Mage::getResourceModel('catalog/product_type_configurable')
                  ->load($configurableProduct, $configurableProduct->getId());

    $ids = $configurableProduct
        ->getTypeInstance()
        ->getUsedProductIds();

    $newids = array();
    foreach ($ids as $id) {
        $newids[$id] = 1;
    }
    $newids[$childProduct->getId()] = 1;

    //$loader->saveProducts( $_configurableProduct->getid(), array_keys( $newids ) );                
    $loader->saveProducts($configurableProduct, array_keys($newids));
}
Run Code Online (Sandbox Code Playgroud)

但是当我试图像这样调用函数时:

$sProduct = Mage::getModel('catalog/product')
                ->loadByAttribute('sku', $v);
$cProduct = Mage::getModel('catalog/product')
                ->loadByAttribute('sku', $sku);
attachProductToConfigurable($sProduct, $cProduct);
Run Code Online (Sandbox Code Playgroud)

(每个简单的产品SKU一步一步地传递给可配置的产品)

Fatal error: Call to a member function getId() on a non-object in ... on line 1018

这是函数本身的这一行

$loader = Mage::getResourceModel('catalog/product_type_configurable')
              ->load($configurableProduct, $configurableProduct
              ->getId());
Run Code Online (Sandbox Code Playgroud)

由于我没有找到类似于将简单SKU加入现有可配置产品的任何类似内容,因此在查看初始化函数调用,资源模型等时可能会出现问题.

我们非常感谢任何关于如何密切关注这一点的想法.

Mar*_*ius 21

尝试一下:

Mage::getResourceSingleton('catalog/product_type_configurable')
    ->saveProducts($mainConfigrableProduct, $simpleProductIds);
Run Code Online (Sandbox Code Playgroud)

$mainConfigrableProduct必须配置产品的实例,并$simpleProductIds与相关的可配置的产品简单的产品ID的数组.

另外,在这样做时要非常小心.简单产品必须与可配置产品属于同一属性集.如果不是,那么可能会发生什么.