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

pan*_*ake 50 product magento stock

我正在Magento主题的(个人)产品页面上显示库存可用性,而且我对此并不完全了解.

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

Mage_Catalog_Model_Product::isAvailable()
Mage_Catalog_Model_Product::isSaleable()
Run Code Online (Sandbox Code Playgroud)

我自己的发现:
我看到了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          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行) .

小智 -1

我看到那些有语义差异。如果无库存的商品设置为允许缺货,则该商品仍然可以销售。

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

因此,大胆猜测一下您何时会选择其中之一:

如果您正在检查单个产品以查看该产品是否实际上已准备好销售,您应该使用isSalable(),因为它会调用isAvailable()

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

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

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

isSaleable()是 的别名isSalable()