ตัวอย่างของคุณไม่นำค่าสำหรับ "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;
}
สิ่งนี้จะรวมตารางสินค้าคงคลังด้วยเงื่อนไขต่อไปนี้:
ผลิตภัณฑ์ไม่ได้ใช้การกำหนดค่าส่วนกลางและตั้ง"จัดการสต็อค" เป็น "ใช่" และมีในสต็อก
หรือ
ผลิตภัณฑ์ไม่ได้ใช้การกำหนดค่าระดับโลกและตั้งค่า"จัดการสต็อค" เป็น "ไม่"
หรือ
- ผลิตภัณฑ์ใช้การกำหนดค่าส่วนกลางและหากการกำหนดค่าส่วนกลางคือ "จัดการสต็อค = ใช่" อยู่ในสต็อก
คุณต้องคว่ำเงื่อนไขดังต่อไปนี้:
ผลิตภัณฑ์ไม่ได้ใช้การกำหนดค่าส่วนกลางและตั้งค่า"จัดการสต็อค" เป็น "ใช่" และไม่ได้อยู่ในสต็อก
หรือ
ผลิตภัณฑ์ใช้การกำหนดค่าระดับโลกและการกำหนดค่าระดับโลกคือ "จัดการสต็อก = ใช่" และไม่ได้อยู่ในสต็อก
คำอธิบาย: คุณจะใช้เงื่อนไขที่มีการตรวจสอบ 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;
}