Задать вопрос
z0rg
@z0rg
senior developer / devops

По каким критериям Magento может выставить для простых товаров, составляющих настраиваемый, статус Disabled?

А так же как быстро отыскать данный участок кода?
  • Вопрос задан
  • 3065 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
Единственной причиной автоматического перевода ядром 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;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы