この例では、「use config」の値は考慮されていません。
仕組みを見てみましょうaddInStockFilterToCollection
:
public function addInStockFilterToCollection($collection)
{
$this->getResource()->setInStockFilterToCollection($collection);
return $this;
}
OK、それは別のメソッドに委譲しています:
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;
}
これにより、以下の条件で在庫表が結合されます。
製品には、グローバルコンフィギュレーションを使用していないと、「はい」にセット「の在庫を管理」しているとの入荷です
または
製品には、グローバルコンフィギュレーションを使用していないと「ノー」にセット「の在庫を管理しました」
または
- 製品には、グローバルコンフィギュレーションを使用しますと、グローバル設定がある場合は、「管理株式= yes」と、在庫があります
次のように条件を反転させる必要があります。
製品には、グローバルコンフィギュレーションを使用していないと、「はい」にセット「の在庫を管理」しているとの在庫ではありません
または
製品には、グローバルコンフィギュレーションを使用しますと、グローバルコンフィギュレーションは、「はい=株式の管理」であると株式ではありません
説明: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;
}