isSaleable() 和 isAvailable() 之间有什么区别?
我正在我的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 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