我正在我的 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
行) .