Работа со складами и количеством товаров в Битрикс D7
Последние записи
Выбор склада по айди в Битрикс через D7
$arStore = \Bitrix\Catalog\StoreTable::getById($ID)->fetch();
Выборка активных складов:
//Выборка всех активных складов:
$rsStore = \Bitrix\Catalog\StoreTable::getList(array(
'filter' => array('ACTIVE'>='Y'),
));
while($arStore=$rsStore->fetch()){
$arIBlockListID['STORES'][$arStore['ID']]=$arStore;
}
Чтобы выбрать все поля включая пользовательские, добавляем в запрос конструкцию 'select'=>array('*','UF_*')
:
$arStore = \Bitrix\Catalog\StoreTable::getList(array(
'filter'=>array('=ID'=>$storeId),
'select'=>array('*','UF_*'),
))->fetch();
Добавляем к выбору складов кеширование
CModule::IncludeModule("catalog");
$cntIBLOCK_List = 'Stores';
$cache = new CPHPCache();
$cache_time = 3600*24*360; //кеш на год
$cache_id = 'arIBlockListID'.$cntIBLOCK_List;
$cache_path = 'arIBlockListID';
if ($cache_time > 0 && $cache->InitCache($cache_time, $cache_id, $cache_path))
{
$res = $cache->GetVars();
if (is_array($res["arIBlockListID"]) && (count($res["arIBlockListID"]) > 0)){
$arIBlockListID = $res["arIBlockListID"];
}
$arIBlockListID['CACHE']='true';
}
if (!is_array($arIBlockListID))
{
$arIBlockListID['CACHE']='false';
//Выборка всех активных складов:
$rsStore = \Bitrix\Catalog\StoreTable::getList(array(
'filter' => array('ACTIVE'>='Y'),
));
while($arStore=$rsStore->fetch()){
$arIBlockListID['STORES'][$arStore['ID']]=$arStore;
}
//////////// end cache /////////
if ($cache_time > 0)
{
$cache->StartDataCache($cache_time, $cache_id, $cache_path);
$cache->EndDataCache(array("arIBlockListID"=>$arIBlockListID));
}
}
Если вы используете магазин Аспро, то можете воспользоваться встроенной функцией:
$arStores=CNextCache::CCatalogStore_GetList(array(), array("ACTIVE" => "Y"), false, false, array());
Получаем всю информацию о товаре включая кол-во (устаревший метод):
CCatalogProduct::GetByID($productID)
Выборка количества товара с идентификатором в $productId на всех активных складах:
$rsStoreProduct = \Bitrix\Catalog\StoreProductTable::getList(array(
'filter' => array('=PRODUCT_ID'=>$arResult["ID"],'STORE.ACTIVE'=>'Y'),
'select' => array('*','UF_*'),
));
while($arStoreProduct=$rsStoreProduct->fetch()){
$amount[$arStoreProduct['STORE_ID']] = $arStoreProduct;
}
Выборка количества товара с идентификатором в $productId на всех активных складах (дополнительно выбираем название склада):
$rsStoreProduct = \Bitrix\Catalog\StoreProductTable::getList(array(
'filter' => array('=PRODUCT_ID'=>$productId,'STORE.ACTIVE'=>'Y'),
'select' => array('AMOUNT','STORE_ID','STORE_TITLE' => 'STORE.TITLE'),
));
while($arStoreProduct=$rsStoreProduct->fetch()){
print_r($arStoreProduct);
}
Выборка количества товара с идентификатором в $productId на складе с идентификатором в $storeId (дополнительно выбираем название склада и название товара):
$rsStoreProduct = \Bitrix\Catalog\StoreProductTable::getList(array(
'filter' => array('=PRODUCT_ID'=>$productId,'=STORE_ID'=>$storeId),
'limit' => 1,
'select' => array('AMOUNT','STORE_TITLE' => 'STORE.TITLE', 'PRODUCT_NAME' => 'PRODUCT.IBLOCK_ELEMENT.NAME'),
));
if($arStoreProduct=$rsStoreProduct->fetch()){
print_r($arStoreProduct);
}
Использованы материалы сайта:
Комментарии