Basit Ürün Koleksiyonu Yükle (hem stokta hem de stokta yok)


9

Yapılandırılabilir bir Ürünün TÜM "alt" ürünlerini bir koleksiyona, stokta olmayanları bile yüklerken bir sorunla karşılaştım.

Bunun gibi ürünleri yüklemek gibi:

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

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

stokta bulunmayan, büyük olasılıkla birleştirilen fiyat tablolarında yer almadığı için çocuk ürünlerini yok sayar.

GetChildrenIds tarafından tüm çocuk kimliklerini yüklemeden ve daha sonra her bir basit ürünü yük ile yüklemeden başka bir seçenek var mı ?

Yanıtlar:


2

Çağrısında sorun yatıyor 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;
}

Bu, yalnızca geçerli mağazada satılabilen ürünleri göstermek için filtreler ekler.

Eğer $configurablesenin yapılandırılabilir ürünün tipi örneğidir, aradığınız önce böyle mağaza filtreyi unset yapabilirsiniz getUsedProductCollection():

$configurable->setStoreFilter(null);

Tam çözüm:

$configurable = $product->getTypeInstance();

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

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

1

Bu şekilde denerseniz ne olur:

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


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

Bir şans ver.


1

Bu soru için aşağıdaki kodu alternatif çözüm olarak kullanabilirsiniz:

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

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

1

Yapılandırılabilir bir ürünle ilişkili ürün koleksiyonuna ihtiyacınız varsa, aşağıdakilerin çalışması gerekir:

$configurableProduct = Mage::getModel('catalog/product')->load(<your_product_id>);
$associatedProducts = $configurableProduct->getTypeInstance()->getUsedProductCollection($configurableProduct);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.