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