Örneğiniz "use config" değerini dikkate almaz.
Nasıl addInStockFilterToCollection
çalıştığına bir göz atalım :
public function addInStockFilterToCollection($collection)
{
$this->getResource()->setInStockFilterToCollection($collection);
return $this;
}
Tamam, başka bir yönteme devrediyor:
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;
}
Bu, envanter tablosuna aşağıdaki koşullarla katılır:
Ürün küresel yapılandırmayı kullanmaz VE "evet" set "stok yönetme" vardır VE stoğa
VEYA
Ürün genel yapılandırmayı kullanmıyor VE "stoğu yönet", "hayır" olarak ayarlanmış
VEYA
- Ürün global yapılandırmayı kullanıyor VE global yapılandırma "stok yönet = evet" ise, stokta
Koşulları aşağıdaki gibi ters çevirmeniz gerekir:
Ürün genel yapılandırmayı kullanmıyor VE "stok yönet" seçeneği "evet" olarak ayarlandı VE stokta yok
VEYA
Ürün global yapılandırmayı kullanıyor VE global yapılandırma "stok yönet = evet" VE stokta yok
Açıklama: Yalnızca in_stock'un gerçekten denetlendiği koşulları alıyorsunuz ve karşılaştırmayı 0 olarak değiştiriyorsunuz. , "stokta yok" sorgusuna dahil etmiyoruz.
O zaman bu kodunuz:
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;
}