2014-04-25 10 views
7

Próbuję programowo dołączyć niektóre istniejące proste produkty do istniejącego konfigurowalnego produktu.Programowo programuje proste produkty konfigurowalnego produktu

Nie znalazłem żadnych wskazówek/dokumentacji na ten temat. Przeanalizowałem wtyczkę MAGMI Magento Mass Importer (w szczególności plik magmi_productimportengine.php) bez powodzenia.

Potem znalazłem ten fragment:

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)); 
} 

Ale gdy próbuję wywołać funkcję tak:

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

(każdy prosty produkt SKU zostanie przeniesiony krok po kroku, aby konfigurowalny Produkt)

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

który ta linia z funkcji samego

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

Ponieważ nie znaleźć niczego podobnego do łączenia prostych SKU do istniejącego konfigurowalnego produktu, siedzę patrząc w górę, co może być nie tak na inicjowanie wywołań funkcji, modele zasobów itp ..

pomysłów o tym, na co warto zwrócić uwagę, aby to osiągnąć, są wysoko cenione.

Odpowiedz

21

spróbuj tego:

Mage::getResourceSingleton('catalog/product_type_configurable') 
    ->saveProducts($mainConfigrableProduct, $simpleProductIds); 

Gdzie $mainConfigrableProduct musi być instancją produktu konfigurowalnego i $simpleProductIds jest tablicą z identyfikatorami prostych produktów związanych z konfigurowalnych produktów.

Na marginesie, bądź bardzo ostrożny, gdy to robisz. Proste produkty muszą mieć ten sam zestaw atrybutów, co konfigurowalne produkty. Here is what can happen if they are not.

+0

Cześć Marius, jeszcze raz dziękuję! Scalanie SKU w ten sposób działa bez błędu. Jak już wspomniałeś, muszę teraz uzyskać zestaw atrybutów. Dziękuję również za wskazanie na niebezpieczeństwo! :-) Wszystkiego najlepszego –

Powiązane problemy