61

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

4

5 回答 5

1

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

所以语义上的区别是:

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

您可以尝试通过下订单来验证这一点。并像你已经做的那样做同样的检查。这将导致可用产品的数量和可销售产品的数量之间存在差异。

编辑: 更多信息在这里:

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

于 2020-10-13T10:00:23.577 回答
0

isSeable()看起来它正在检查它是否达到 0

isAvailable()好像在数

于 2020-08-17T13:00:38.280 回答
-1

我看到那些有语义差异的人。如果该项目设置为允许延期交货,则没有库存的项目仍然可以销售。

据我所知,它看起来像是isAvailable检查产品类型实例以查看产品类型是否可以出售,如果它确实可用。

因此,冒险猜测您何时可能会选择其中一个:

如果您正在检查单个产品以查看该产品是否真的可以出售,您应该使用isSalable(),因为它会调用isAvailable()

要检查是否可以出售产品(您不知道其类型),并且我想跳过检查产品类型的步骤,您可以调用isAvailable()产品。

isAvailable()检查产品的类型是否可销售。

isSalable()检查产品是否可销售。

isSaleable()是 的别名isSalable()

于 2012-01-28T04:07:53.813 回答
-4

就我而言,isSaleable()这意味着您正在检查准备出售的最顶级产品。WhileisAvailable()表示您正在从可用列表中检查产品。

于 2016-09-19T12:15:11.140 回答
-6

isAvailable()用于决定是否将产品显示为库存缺货,而 isSaleable()用于决定是否显示添加到购物车按钮。

于 2015-05-08T10:45:50.193 回答