이 예에서는 "use config"값을 고려하지 않았습니다.
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;
}
다음 조건으로 인벤토리 테이블을 조인합니다.
제품은 글로벌 구성을 사용하지 않는 및 "예"로 설정을 "재고 관리"가 AND 재고가
또는
제품은 글로벌 구성을 사용하지 않는 및 "아니오"에 "재고 관리"세트가 있습니다
또는
- 제품은 글로벌 구성을 사용 및 글로벌 구성이 "관리 재고 = 예", 재고가
다음과 같이 조건을 반전해야합니다.
제품은 글로벌 구성을 사용하지 않는 및 "예"로 설정을 "재고 관리"가 및 재고가없는
또는
제품은 글로벌 구성을 사용 및 글로벌 구성은 "예 = 재고 관리"입니다 및 재고가없는
설명 : 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;
}