Załaduj kolekcję prostych produktów (zarówno w magazynie, jak i w magazynie)

9

Mam problem z ładowaniem WSZYSTKICH produktów „potomnych” produktu konfigurowalnego do kolekcji, nawet tych, których nie ma na magazynie.

Jak ładowanie takich produktów:

$simpleCollection = $configurable->getUsedProductCollection()
    ->addAttributeToSelect('*')
    ->addFilterByRequiredOptions();

foreach ($simpleCollection as $simple) {
   //$simple->getName();
}

zignoruje produkty potomne, których nie ma na magazynie, prawdopodobnie dlatego, że nie są wymienione w połączonych tabelach cen.

Czy istnieje inna opcja bez ładowania wszystkich identyfikatorów podrzędnych przez getChildrenIds, a następnie ładowania każdego prostego produktu z ładowaniem ?

patrickzzz
źródło

Odpowiedzi:

2

Problem polega na wywołaniu addStoreFilter()in getUsedProductCollection():

public function getUsedProductCollection($product = null)
{
    $collection = Mage::getResourceModel('catalog/product_type_configurable_product_collection')
        ->setFlag('require_stock_items', true)
        ->setFlag('product_children', true)
        ->setProductFilter($this->getProduct($product));
    if (!is_null($this->getStoreFilter($product))) {
        $collection->addStoreFilter($this->getStoreFilter($product));
    }

    return $collection;
}

Dodaje to filtry, aby wyświetlać tylko produkty, które można sprzedać w bieżącym sklepie.

Jeśli $configurablejest to typ instancji konfigurowalnego produktu, możesz wyłączyć filtr sklepu przed wywołaniem getUsedProductCollection():

$configurable->setStoreFilter(null);

Kompletne rozwiązanie:

$configurable = $product->getTypeInstance();

$configurable->setStoreFilter(null);
$simpleCollection = $configurable->getUsedProductCollection()
    ->addAttributeToSelect('*')
    ->addFilterByRequiredOptions();

foreach ($simpleCollection as $simple) {
   //$simple->getName();
}
Fabian Schmengler
źródło
1

Co się stanie, jeśli spróbujesz w ten sposób:

$simpleCollection = $configurable->getUsedProductCollection()
                     ->addAttributeToSelect('*')
                     //->addFilterByRequiredOptions() //don't use any filter, get all itmes
                     ;


foreach($simpleCollection as $simple){
   //$simple->getName();
}

Spróbuj.

Adarsh ​​Khatri
źródło
1

Możesz użyć poniższego kodu jako alternatywnego rozwiązania tego pytania:

$simpleCollection=$configurable->getTypeInstance(true)
                ->getUsedProducts(null,$configurable);

foreach($simpleCollection as $simple){
   //$simple->getName();
}
Amit Bera
źródło
1

Jeśli potrzebujesz kolekcji produktów powiązanych z konfigurowalnym, powinny działać następujące elementy:

$configurableProduct = Mage::getModel('catalog/product')->load(<your_product_id>);
$associatedProducts = $configurableProduct->getTypeInstance()->getUsedProductCollection($configurableProduct);
Alessandro Ronchi
źródło