Документация для разработчиков
Темная тема

catalog.product.list

catalog.product.list(select, filter, order, start)

Метод получает список товаров торгового каталога по фильтру.

Если операция успешна, возвращается список товаров в теле ответа.

Параметры

ПараметрТип Описание
selectobject Поля, соответствующие доступному списку полей getFieldsByFilter.
filterobject Поля, соответствующие доступному списку полей getFieldsByFilter.
orderobject Поля, соответствующие доступному списку полей getFieldsByFilter.
startstring Номер страницы вывода.


Примеры

BX24.callMethod(
    'catalog.product.list', 
    { select:{
		id		
	  } ,
	  filter:{
		'>property109':{
			value: '2019-03-01T16:10:00+02:00'
		}
	  },
	  order:{
		id: ASC
	  },
	  start: 1
	}, 
    function(result)
    {
        if(result.error())
            console.error(result.error().ex);
        else
            console.log(result.data());
});

Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
2
Андрей Гомзин
Сообщение не промодерировано, возможны ошибки и неточности.
Очень много вопросов к этому методу. Во-первых, если мне нужно получить информацию по товарам в облаке, зачем спрашивать с меня ID инфоблока? Почему не взять стандартно назначенный в системе по умолчанию? Во всех прошлых методах для каталога этого не требовалось. Даже если учесть, что теперь есть и товары, и вариации - ID позиций там не пересекаются. Либо можно было сделать просто 2 разных метода. Экспериментальным путем установил, что на облаке по умолчанию iblockId для товаров - 15, для вариаций - 17.

Далее, что хуже - данный метод не фильтрует по массиву id. То есть ему нельзя передать в фильтре 'id' => array(333, 335, 337), это выдаст пустое значение. Пробовал собирать в строку 'id' => '333|335|337', пробовал задавать сложную логику через array("LOGIC" => "OR", array('id' => 333), array('id' => 335), array('id' => 337)), ничего из этого не сработало.
Нашел решение - фильтровать по полю 'xmlId', значения которого присваиваются автоматически при внесении товара в систему такие же, как и id. Главное, чтобы пользователи не трогали это поле в системе.
Таким образом, для получения списка вариаций по id (например, после их получения из товаров (rows) в сделке как параметр productId), подойдут такие параметры:
Код
$cmd['products'] = 'catalog.product.list?'.http_build_query(array(
   'filter' => array('iblockId' => 17, 'xmlId' => array(333, 335, 337)),
   'select' => array('id', 'iblockId', '*'),
));
3
dane_zaltex
Сообщение не промодерировано, возможны ошибки и неточности.
Уточню еще больше по ошибкам в примере:
1. Минимальный набор полей при select "id" и "iblockId" (и, да - это массив, а не объект).
2. Строковые значения должны быть заключены в кавычки (это касается значений при select и при order в данном примере).
3. Если нужно выбрать все поля, то необходимо указать в select "*", а не пустой объект, как в других случаях.
6
Эльяр Арзыкаев
Сообщение не промодерировано, возможны ошибки и неточности.
Пример не корректный!
Правильно будет вот так:
BX24.callMethod(
'catalog.product.list',
{
select:['id', 'iblockId'] ,
filter:{iblockId: iblockId},
order:{         id: ASC       },
start: 1
},
function(result)     {
if(result.error())             console.error(result.error().ex);
else             console.log(result.data());
});
select - это не объект, а массив!
Так же если вы обращаетесь к этому методу через js, например через axios или другие библиотеки, обратите внимание, что данный метод корректно работает только с post!  
© «Битрикс», 2001-2023, «1С-Битрикс», 2023
Наверх