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