В чем разница между isSaleable() и isAvailable()?

Я работаю над отображением наличия товара на складе на странице (отдельного) товара в моей теме 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() используется для решения чего-то вроде того, показывать ли кнопку "Добавить в корзину".

На бэкенде я заметил, что когда количество товара на складе становится равным нулю и обратные заказы не разрешены, наличие товара на складе переходит в состояние "нет в наличии". Когда количество товара на складе становится равным нулю, а обратные заказы разрешены, наличие товара на складе a остается неизменным.

Вопрос:
Свойства "наличие на складе" и "количество на складе" очевидно связаны друг с другом и с упомянутыми методами PHP. Я хотел бы узнать:

  • в чем семантическая разница между PHP-методами isAvailable() и 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).

50
задан pancake 28 January 2012 в 00:41
поделиться