我正在处理Magento主题中商品页面上库存可用性的显示,但其中有些内容我不是很理解。
我发现模板中使用了两种方法来检查商品是否可售:
Mage_Catalog_Model_Product::isAvailable()
Mage_Catalog_Model_Product::isSaleable()
我的发现:
我发现 isSalable()
(它又被isSaleable()
调用)会调用 isAvailable()
,但同时也会分发两个事件 (catalog_product_is_salable_before
and catalog_product_is_salable_after
)。
在前端中,我注意到在Magento的基本模板中,isAvailable()
被用于决定是否将产品显示为“有货”或“无货”;isSaleable()
则用于决定是否显示“加入购物车”按钮之类的内容。
在后端中,我注意到当库存数量变为零且不允许备货时,产品的库存可用性会变为“无货”。 当库存数量变为零且允许备货时,产品的库存可用性不会改变。
问题:
“库存可用性”和“库存数量”属性显然与这些PHP方法相关。我想知道:
isAvailable() 和 isSaleable() 这两个 PHP 方法之间的语义差异是什么,以及为什么我会选择其中一个方法而不是另一个方法;
我似乎还不了解它们与这些属性以及Magento行为的关系。
谢谢。
编辑:
我尝试了每个产品的库存数量 (-1、0、1),库存可用性 (有/无) 和备货 (开/关) 的相关组合,结果如下:
St.Qu BckOrd St.Av isSalable() isSaleable() isAvailable() -1 0 0 0 0 0 -1 0 1 N/A N/A N/A -1 1 0 0 0 0 -1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 N/A N/A N/A 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
行)。