लोड सरल उत्पाद संग्रह (स्टॉक में और स्टॉक से बाहर)


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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.