我正在我的 Magento 主题的(个人)产品页面上显示库存可用性,对此我有些不完全理解。
我看到模板中使用了两种方法来检查产品是否可供销售:
Mage_Catalog_Model_Product::isAvailable()
Mage_Catalog_Model_Product::isSaleable()
我自己的发现:
我看到isSalable()(又由isSaleable()调用)调用isAvailable()但也调度了两个事件(catalog_product_is_salable_before和catalog_product_is_salable_after)。
在前端,我注意到 Magento 的基本模板isAvailable()用于决定是否将产品显示为“有货”或“缺货”;isSaleable()用于决定是否显示“添加到购物车”按钮。
在后端,我注意到当库存数量变为零并且不允许延期交货时,产品的库存可用性变为“缺货”。当库存数量为零且允许延期交货时,产品的库存可用性保持不变。
问题:
属性“库存可用性”和“库存数量”显然与上述 PHP 方法相互关联。我想知道:
PHP 方法之间 的语义差异是什么以及为什么我会使用其中一种方法;
isAvailable()isSaleable()我似乎还不知道它们与这些属性和 Magento 行为的关系。
谢谢你。
编辑:
我已经尝试了产品的库存数量(-1,0,1)、库存可用性(进/出)和缺货(开/关)的所有相关组合,结果如下:
St.Qu BckOrd St.Av isSalable() isSaleable() isAvailable()
-1 0 0 0 0 0
-1 0 1 不适用/不适用/不适用
-1 1 0 0 0 0
-1 1 1 1 1 1
0 0 0 0 0 0
0 0 1 不适用/不适用/不适用
0 1 0 0 0 0
0 1 1 1 1 1
1 0 0 0 0 0
1 0 1 1 1 1
1 1 0 0 0 0
1 1 1 1 1 1
只是为了完整起见:
St.Av 0 = out of stock
St.Av 1 = in stock
BckOrd 0 = no backorders allowed
BckOrd 1 = backorders are allowed
Magento 中的库存可用性开关控制所有 PHP 方法的返回值,但是当缺货订单关闭且库存数量降至 1 以下时,库存可用性将自动重置为“缺货”(因此N/A行) .