Il tuo esempio non tiene conto del valore di "usa config".
Diamo un'occhiata a come addInStockFilterToCollection
funziona:
public function addInStockFilterToCollection($collection)
{
$this->getResource()->setInStockFilterToCollection($collection);
return $this;
}
OK, sta delegando a un altro metodo:
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;
}
Ciò si unisce alla tabella di inventario con le seguenti condizioni:
Il prodotto non utilizza la configurazione globale E ha "gestisci stock" impostato su "sì" ED è disponibile
O
Il prodotto non utilizza la configurazione globale E ha "gestisci stock" impostato su "no"
O
- Il prodotto utilizza la configurazione globale E se la configurazione globale è "gestisci stock = yes", è disponibile
È necessario invertire le condizioni come segue:
Il prodotto non utilizza la configurazione globale E ha "gestisci stock" impostato su "sì" E non è disponibile
O
Il prodotto utilizza la configurazione globale E la configurazione globale è "gestisci stock = yes" E non è disponibile
Spiegazione: si prendono solo le condizioni in cui in_stock è effettivamente verificato e si modifica il confronto in 0. Le condizioni in cui in_stock non è controllato ("gestisci stock" = "no") indicano che il prodotto è sempre disponibile, indipendentemente dallo stato dello stock , quindi non li includiamo nella nostra query "esaurito".
Quindi questo è il tuo codice:
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;
}