Contoh Anda tidak memperhitungkan nilai "gunakan konfigurasi".
Mari kita lihat bagaimana cara addInStockFilterToCollection
kerjanya:
public function addInStockFilterToCollection($collection)
{
$this->getResource()->setInStockFilterToCollection($collection);
return $this;
}
Oke, itu mendelegasikan ke metode lain:
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;
}
Ini bergabung dengan tabel inventaris dengan ketentuan sebagai berikut:
Produk tidak menggunakan konfigurasi global DAN memiliki "kelola stok" diatur ke "ya" DAN masih ada stok
ATAU
Produk tidak menggunakan konfigurasi global DAN "mengatur stok" diatur ke "tidak"
ATAU
- Produk menggunakan konfigurasi global DAN jika konfigurasi global "kelola stok = ya", ada stok
Anda perlu membalikkan kondisinya sebagai berikut:
Produk tidak menggunakan konfigurasi global DAN memiliki "kelola persediaan" diatur ke "ya" DAN tidak ada dalam persediaan
ATAU
Produk menggunakan konfigurasi global DAN konfigurasi global adalah "kelola stok = ya" DAN tidak ada dalam stok
Penjelasan: Anda hanya mengambil kondisi di mana in_stock benar-benar diperiksa dan mengubah perbandingan menjadi 0. Kondisi di mana in_stock tidak diperiksa ("kelola stok" = "tidak") berarti bahwa produk selalu dalam stok, terlepas dari status persediaan. , jadi kami tidak memasukkannya dalam kueri "habis".
Maka ini adalah kode Anda:
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;
}