isSaleable() 和 isAvailable() 有什么区别?

2024-05-08

我正在我的 Magento 主题的(单个)产品页面上显示库存可用性,但有些事情我并不完全理解。

我看到模板中使用了两种方法来检查产品是否可供销售:

    Mage_Catalog_Model_Product::isAvailable()
    Mage_Catalog_Model_Product::isSaleable()

我自己的发现:
我看到isSalable()(反过来又被称为isSaleable()) calls isAvailable()而且还调度两个事件(catalog_product_is_salable_before and catalog_product_is_salable_after).

在前端,我注意到在 Magento 的基本模板中isAvailable()用于决定是否将产品显示为“有货”或“缺货”;isSaleable()用于决定是否显示“添加到购物车”按钮等。

在后端,我注意到当库存数量变为零并且缺货时not如果允许,产品的库存状况将变为“缺货”。 当库存数量变为零且缺货时are允许的情况下,产品的库存量保持不变。

问题:
“库存可用性”和“库存数量”属性显然彼此之间以及所提到的 PHP 方法之间存在联系。我想知道:

  • 什么semanticPHP 方法之间的区别isAvailable() and isSaleable()是以及为什么我会使用其中一个而不是另一个;

  • 它是什么我似乎还不知道它们与这些属性和 Magento 行为的关系。

谢谢。

EDIT:
我已经尝试了产品的库存数量(-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 rows).


如果我没记错的话,这些检查的差异与已下订单的产品预订有关。当客户将产品添加到订单中时,这些产品仍然在您的库存中,因此它们仍然可用。不过,它们无法销售,因为它们已经被另一位客户订购了。

所以语义差异是:

  • 可销售的意思是:有库存并且尚未被其他客户订购
  • 可用的意思是:有库存,但由其他客户订购,因此可用,但不可销售。

您可以尝试通过订购产品来验证这一点。并进行与您已经做过的相同的检查。这应该会导致可用产品数量和可销售产品数量之间的差异。

Edit:更多信息请点击这里:

https://blog.magestore.com/magento-multi-source-inventory-msi/#a3 https://blog.magestore.com/magento-multi-source-inventory-msi/#a3

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

isSaleable() 和 isAvailable() 有什么区别? 的相关文章