【问题标题】:What is the difference between isSaleable() and isAvailable()?isSaleable() 和 isAvailable() 有什么区别?
【发布时间】:2012-01-27 19:33:39
【问题描述】:

我正在努力在我的 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 不适用 不适用 不适用 -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

控制所有 PHP 方法的返回值的是 Magento 中的库存可用性开关,但是当缺货订单关闭且库存数量降至 1 以下时,库存可用性将自动重置为“缺货”(因此N/A 行)。

【问题讨论】:

  • 漂亮的桌子,帮了我:)

标签: php magento product stock


【解决方案1】:

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

所以语义上的区别是:

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

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

编辑: 更多信息在这里:

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

【讨论】:

    【解决方案2】:

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

    isAvailable() 好像在计数

    【讨论】:

    • 你能再解释一下吗,也许有一些例子?
    【解决方案3】:

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

    据我所知,isAvailable 似乎检查了一个产品类型实例以查看该产品类型是否可以出售,如果它确实可用。

    所以,大胆猜测一下你什么时候可以选择一个而不是另一个:

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

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

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

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

    isSaleable() 是isSalable() 的别名。

    【讨论】:

    • 我理解有库存的东西和能够卖东西之间的语义差异,但我仍然不知道 isSaleable()/isSalable() 和 isAvailable() 之间的语义差异是什么。为什么在我能想到的每种情况下都使用一个而不是另一个?我说“我能想到的”是因为我想知道是否有我没有想到的情况可能会区分这些方法,因为现在我觉得其中一种没用,我认为是有点快判断。
    • 在您编辑的问题中,您已经写了当缺货关闭且库存数量降至 1 以下时,库存可用性将自动重置为“缺货”还有一个“stock_is_changed_automatically”标志,它我用来显示(技术上)没有库存的物品,并且明确有库存,缺货,数量 = 0
    • 这是有用的信息,谢谢。我不想显得忘恩负义,但我仍然不知道何时使用 isSaleable 以及何时使用 isAvailable,当他们似乎 做同样的事情时。我目前正在构建一个主题,所以我想把它做好。
    • 是的,评论没有回答你的问题,但我认为可能有某种相关性,我对我的回答的编辑与你所说的 Mage 的基本模板的设置方式有些不一致。也许其他人会插话。
    【解决方案4】:

    就我而言,isSaleable() 表示您正在检查准备销售的最顶级产品。而isAvailable() 表示您正在检查可用列表中的产品。

    【讨论】:

      【解决方案5】:

      isAvailable() 用于决定是将产品显示为 in stock 还是 out of stock,而 isSaleable( ) 用于决定是否显示添加到购物车按钮。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-02
        • 2011-12-12
        • 2010-09-16
        • 2012-03-14
        • 2012-02-06
        • 2011-02-25
        • 2011-11-22
        • 2015-03-26
        相关资源
        最近更新 更多