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

标签 php magento product stock

我正在致力于在我的 Magento 主题的(单个)产品页面上显示库存情况,但我对此并不完全理解。

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

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

我自己的发现:
我看到 isSalable() (又由 isSaleable() 调用)调用 isAvailable() 但也调度两个事件 ( >catalog_product_is_salable_beforecatalog_product_is_salable_after)。

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

在后端,我注意到,当库存数量变为零且不允许延期交货时,产品的库存状况将变为“缺货”。 当库存数量变为零并且允许延期交货时,产品的库存量保持不变。

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

  • PHP 方法 isAvailable() 和 PHP 方法之间的语义区别是什么 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

Just for the sake of completeness:

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 行)。

最佳答案

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

所以语义差异是:

  • 可销售是指:有库存且尚未被其他客户订购
  • 有货是指:有库存,但由其他客户订购,因此有货,但不可销售。

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

编辑: 更多信息请参见:

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

关于php - isSaleable() 和 isAvailable() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9038988/

相关文章:

php - 翻译 magento 形式

php - 处理您的请求时出错 : SQLSTATE[42S01]: Base table or view already exists: in magento 1. 9

magento - 在不同商店 View 中更改 Magento 产品状态

phpactiverecord - 显示生成的查询?

php - 如何启动我从github下载的laravel项目

php - 使用 php 在 mysqli 中进行 2 个查询或 1 个查询?

Magento:从另一家商店获取产品价格?

php - 获取刚刚使用 MySQL 插入的行的自动编号 ID

apache - Magento 和多个域

php - 将税级列添加到 WooCommerce 管理产品列表