आपका उदाहरण खाते में "कॉन्फ़िगरेशन का उपयोग करें" के लिए मान नहीं लेता है।
आइए नजर डालते हैं कि कैसे addInStockFilterToCollection
काम करता है:
public function addInStockFilterToCollection($collection)
{
$this->getResource()->setInStockFilterToCollection($collection);
return $this;
}
ठीक है, यह एक और विधि को सौंप रहा है:
public function setInStockFilterToCollection($collection)
{
$manageStock = Mage::getStoreConfig(Mage_CatalogInventory_Model_Stock_Item::XML_PATH_MANAGE_STOCK);
$cond = array(
'{{table}}.use_config_manage_stock = 0 AND {{table}}.manage_stock=1 AND {{table}}.is_in_stock=1',
'{{table}}.use_config_manage_stock = 0 AND {{table}}.manage_stock=0',
);
if ($manageStock) {
$cond[] = '{{table}}.use_config_manage_stock = 1 AND {{table}}.is_in_stock=1';
} else {
$cond[] = '{{table}}.use_config_manage_stock = 1';
}
$collection->joinField(
'inventory_in_stock',
'cataloginventory/stock_item',
'is_in_stock',
'product_id=entity_id',
'(' . join(') OR (', $cond) . ')'
);
return $this;
}
यह निम्न स्थितियों के साथ इन्वेंट्री टेबल में शामिल होता है:
उत्पाद वैश्विक कॉन्फ़िगरेशन का उपयोग नहीं करता है और "हाँ" करने के लिए "स्टॉक का प्रबंधन" करता है और स्टॉक में है
या
उत्पाद वैश्विक कॉन्फ़िगरेशन का उपयोग नहीं करता है और "स्टॉक" को "नहीं" पर सेट करता है
या
- उत्पाद वैश्विक कॉन्फ़िगरेशन का उपयोग करता है और यदि वैश्विक कॉन्फ़िगरेशन "स्टॉक = हां" प्रबंधित करें, स्टॉक में है
आपको निम्नानुसार शर्तों को पलटना होगा:
उत्पाद वैश्विक विन्यास का उपयोग नहीं करता है और "हां" के लिए "स्टॉक का प्रबंधन" करता है और स्टॉक में नहीं है
या
उत्पाद वैश्विक कॉन्फ़िगरेशन का उपयोग करता है और वैश्विक कॉन्फ़िगरेशन "स्टॉक प्रबंधित करें = हां" और स्टॉक में नहीं है
स्पष्टीकरण: आप केवल उन स्थितियों को लेते हैं जहां in_stock वास्तव में जाँच की जाती है और उनकी तुलना 0. में बदल जाती है। जिन स्थितियों में in_stock जाँच नहीं की जाती है ("स्टॉक प्रबंधित करें" = "नहीं") का अर्थ है कि स्टॉक में उत्पाद हमेशा स्टॉक की स्थिति की परवाह किए बिना रहता है , इसलिए हम उन्हें हमारे "आउट ऑफ स्टॉक" क्वेरी में शामिल नहीं करते हैं।
फिर यह आपका कोड है:
public function setOutOfStockFilterToCollection($collection)
{
$manageStock = Mage::getStoreConfig(Mage_CatalogInventory_Model_Stock_Item::XML_PATH_MANAGE_STOCK);
$cond = array(
'{{table}}.use_config_manage_stock = 0 AND {{table}}.manage_stock=1 AND {{table}}.is_in_stock=0'
);
if ($manageStock) {
$cond[] = '{{table}}.use_config_manage_stock = 1 AND {{table}}.is_in_stock=0';
}
$collection->joinField(
'inventory_in_stock',
'cataloginventory/stock_item',
'is_in_stock',
'product_id=entity_id',
'(' . join(') OR (', $cond) . ')'
);
return $this;
}