Когда наличие разбивается по разным складам, эту информацию нужно где-то хранить. Но как можно её вывести на той же карточке товара?
Как узнать наличие товара на складах в Битриксе?
Для этого нам понадобится CCatalogStoreProduct::GetList. Рассмотрим сначала пример как посчитать общее количество:
$amount = 0; $rsStore = CCatalogStoreProduct::GetList( array(), array('PRODUCT_ID' => $productID), false, false, array('AMOUNT') ); while ($arStore = $rsStore->Fetch()) { $amount += $arStore['AMOUNT']; }
В переменной $amount хранится количество на всех складах. Вообще есть следующие поля:
Поля | Описание |
---|---|
ID | ID записи |
PRODUCT_ID | ID элемента |
AMOUNT | количество |
STORE_ID | ID склада |
STORE_NAME | название склада |
STORE_ADDR | адрес склада |
STORE_DESCR | описание склада |
STORE_GPS_N | широта |
STORE_GPS_S | долгота |
STORE_IMAGE | картинка склада |
Вся информация находится в:
Рабочий стол -> Магазин -> Складской учет -> Склады
Битрикс – пишем функцию по наличию товара на конкретном складе
Для того чтобы написать такую функцию возьмем пример выше, и немного допишем:
function getStorageExistByID($productID) { $region = $_COOKIE['REGIONALITY_REGION_ID']; $arStorage = [ 1 => [122], //Moskva 2 => [123],// Sankt-Peterburg 3 => [114, 129], //Irkutsk 4 => [132], //Ekaterinburg 5 => [124], //Krasnodar 6 => [117], //Krasnoiarsk 8 => [125], //Sochi 9 => [130], //Novosibirsk 10 => [126], //Kazan 11 => [127], //Kaliningrad 12 => [128], //Simferopol ]; $arStore = $arStorage[$region]; $amount = 0; $rsStore = CCatalogStoreProduct::GetList( array(), array('PRODUCT_ID' => $productID, 'STORE_ID' => $arStore), false, false, array('AMOUNT') ); while ($arStore = $rsStore->Fetch()) { $amount += $arStore['AMOUNT']; } return $amount; }
Что делает данный код? Мы передаем ID товара, и по куки смотрим какие склады соответствуют региону. Затем, собираем наличие из полученных складов, т.к. их может быть несколько, то всё храним в массивах.
Вот собственно и всё, благодаря этому коду можно не только выводить информацию по наличию на конкретном складе, но и дополнительную информацию – адрес, описание и т.д.
Стандартно в Битриксе наличие хранится в 1 поле – Доступное количество. Если немного дописать код компонентов, можно выводить информацию о наличие товара, либо скрывать кнопку купить уже исходя из параметра склада.