Единственной причиной автоматического перевода ядром Magento простого товара (в том числе и простого варианта настраиваемого товара) в состояние «
не продавать» (после чего товар снимается с витрины интернет-магазина) является наличие данного товара на складе интернет-магазина в количестве, меньшем заданного административной опцией
«Система» → «Настройки» → «
Каталог» → «
Наличие» → «
Стандартные значения других параметров наличия товара» → «
Минимальное количество единиц конкретного товара на складе, по достижению которого товар считается отсутствующим в наличии».
По умолчанию значением этой опции является «
0», то есть, Magento по умолчанию снимает с продажи товары, закончившиеся на складе.
Обратите внимание, что указанная выше причина автоматического снятия с продажи товара является
необходимой, но не достаточной.
Окончательное решение (снимать или не снимать с продажи товар) Magento принимает, учитывая значение опций
- «Система» → «Настройки» → «Каталог» → «Наличие» → «Стандартные значения других параметров наличия товара» → «Разрешать ли заказ отсутствущих на складе магазина товаров?»
- «Система» → «Настройки» → «Каталог» → «Наличие» → «Параметры наличия товара» → «Выставлять ли на витрину отсутствующие в наличии товары?»
Названия опций даны в соответствии с русификацией Российской сборки Magento.
В англоязычной редакции Magento они называются так:
- «System» → «Configuration» → «Catalog» → «Inventory» → «Product Stock Options» → «Backorders»
- «System» → «Configuration» → «Catalog» → «Inventory» → «Product Stock Options» → «Qty for Item Status to Become Out of Stock»
- «System» → «Configuration» → «Catalog» → «Inventory» → «Stock Options» → «Display Out of Stock Products»
Участки программного кода, ответственные за автоматическое снятие товара с продажи, можно найти по ключевым словам
is_salable,
isSalable,
IsSalable,
isAvailable.
В частности, для простых товаров (настраиваемые варианты настраиваемого товара считаются простыми товарами) автоматическое снятие товара с продажи осуществляет класс
Mage_CatalogInventory_Model_Stock_Status: в двух местах: методах
assignProduct и
addStockStatusToProducts.
public function assignProduct(Mage_Catalog_Model_Product $product, $stockId = 1, $stockStatus = null)
{
if (is_null($stockStatus)) {
$websiteId = $product->getStore()->getWebsiteId();
$status = $this->getProductStatus($product->getId(), $websiteId, $stockId);
$stockStatus = isset($status[$product->getId()]) ? $status[$product->getId()] : null;
}
$product->setIsSalable($stockStatus);
return $this;
}
public function addStockStatusToProducts($productCollection, $websiteId = null, $stockId = null)
{
<...>
$stockStatuses = $this->_getResource()->getProductStatus($productIds, $websiteId, $stockId);
foreach ($stockStatuses as $productId => $status) {
if ($product = $productCollection->getItemById($productId)) {
$product->setIsSalable($status);
}
}
<...>
return $this;
}