Завантажте просту колекцію продуктів (як на складі, так і на складі)


9

У мене виникла проблема з завантаженням у колекцію ВСІХ "дитячих" продуктів Настроюваного продукту, навіть тих, яких немає на складі.

Як завантаження таких продуктів:

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

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

буде ігнорувати дитячі товари, які відсутні на складі, можливо, тому, що вони не вказані в цінових таблицях, які приєднані.

Чи є інший варіант, не завантажуючи всі дочірні ідентифікатори за допомогою getChildrenIds, а потім завантажувати кожен простий продукт із завантаженням ?

Відповіді:


2

Проблема полягає у виклику addStoreFilter()в систему 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;
}

Це додає фільтри, щоб показувати лише продукти, які продаються в поточному магазині.

Якщо $configurableекземпляр типу вашого настроюваного продукту, ви можете зняти фільтр магазину таким чином перед викликом getUsedProductCollection():

$configurable->setStoreFilter(null);

Повне рішення:

$configurable = $product->getTypeInstance();

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

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

1

Що станеться, якщо спробувати так:

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


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

Спробувати.


1

Ви можете використовувати код нижче як альтернативне рішення цього питання:

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

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

1

Якщо вам потрібна колекція продуктів, пов’язаних з налаштованим, слід працювати наступним чином:

$configurableProduct = Mage::getModel('catalog/product')->load(<your_product_id>);
$associatedProducts = $configurableProduct->getTypeInstance()->getUsedProductCollection($configurableProduct);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.