catalog.product.list
catalog.product.list(select, filter, order, start)
Метод получает список товаров торгового каталога по фильтру.
Если операция успешна, возвращается список товаров в теле ответа.
Параметры
Параметр | Тип | Описание |
---|---|---|
select | object | Поля, соответствующие доступному списку полей getFieldsByFilter. |
filter | object | Поля, соответствующие доступному списку полей getFieldsByFilter. |
order | object | Поля, соответствующие доступному списку полей getFieldsByFilter. |
start | string | Номер страницы вывода. |
Примеры
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()); });
![]()
Сообщение не промодерировано, возможны ошибки и неточности.
| ||
Очень много вопросов к этому методу. Во-первых, если мне нужно получить информацию по товарам в облаке, зачем спрашивать с меня 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), подойдут такие параметры:
| ||
![]()
Сообщение не промодерировано, возможны ошибки и неточности.
|
Уточню еще больше по ошибкам в примере:
1. Минимальный набор полей при select "id" и "iblockId" (и, да - это массив, а не объект). 2. Строковые значения должны быть заключены в кавычки (это касается значений при select и при order в данном примере). 3. Если нужно выбрать все поля, то необходимо указать в select "*", а не пустой объект, как в других случаях. |
![]()
Сообщение не промодерировано, возможны ошибки и неточности.
|
Пример не корректный!
Правильно будет вот так: 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
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.