Вывести количество товара битрикс

Сортировка товаров и показ выбранного пользователем количества товаров в 1С-Битрикс

Исторически так сложилось, что комплексный компонент 1С-Битрикс не позволяет пользователю в публичной части отсортировать товары, хотя бы по цене, дате, наименованию, а также выбрать сколько товаров на странице ему выбрать. Но ни один из интернет-магазинов не обходится без такого функционала, который кстати включен в почти все шаблоны готовых интернет-магазинов в Маркетплэйс. Но для реализовать блоки «Сортировать по: . » и «Показать по: . » достаточно просто. Нужно всего-лишь использовать массив $_REQUEST и метод API 1С-Битрикс GetCurPageParam() для передачи данных в этот массив.

Приступим!

Для начала определимся, что от нас хотят:

  • Вывести справа над списком товаров блок «Показать по: 18 36 54 72». (По умолчанию выводится 9).
  • Слева над списком товаров вывести блок «Сортировать по: цене, наименованию, дате».
  • Повторное нажатие на уже выбранный вариант сортировки переключает направление сортировки.
  • Дата — дата изменения, цена — отображаемая цена товара.

Пойдем по порядку и начнем с показа выбранного пользователем из предложенных количества товаров на странице.

За отображение количества товаров на странице отвечает параметр PAGE_ELEMENT_COUNT . В него мы и будем передавать выбранное пользователем количество с помощью $_REQUEST и GetCurPageParam() .

Для начала заведем соответствующую переменную и по-умолчанию присвоим ей значение заданное в параметрах компонента. А затем при клике пользователя на нужное ему количество элементов будем его модифицировать.

Читайте также:  Дракон яда как вывести

Следующий код предлагается размещать перед подключением компонента catalog.section . Если используется комплексный компонент catalog , то в файле в котором происходит вызов компонента catalog.section выводящего товары на нужной странице.

И теперь передадим полученное значение в компонент:

Теперь разберемся с сортировкой. Она не намного сложнее, за исключением того, что нам нужно проверять текущее направление и менять его. Для этого в методе GetCurPageParam() мы будем передавать два параметра sortBy и orderBy . А затем в соответствующих переменных передавать их в параметры компонента «ELEMENT_SORT_FIELD» и «ELEMENT_SORT_ORDER» соответственно. По умолчанию сортировка должна осуществляться с помощью внутреннего поля сортировки 1С-Битрикс — sort .

Проверяем направление сортировки и меняем в случае необходимости:

Выводим ссылки на сортировку:

Параметр name принимается полем «ELEMENT_SORT_FIELD» для сортировки по наименованию товара без дополнительного вмешательства а вот для даты и цены мы должны уточнить, какой из параметров элемента инфоблока мы имеем ввиду.

Для даты нам нужно значение поля ‘timestamp_x’ , отвечающего за дату изменения. Для цены мы должны узнать наименование типа цены, которая выводится из поля элемента инфоблока. Для этого нужно распечатать массив $arItem в шаблоне компонента (в моем случае catalog.section ) либо с помощью var_dump($arItem); , либо ‘; . Находим поле массива отвечающего за вывод цены и копируем его название, в моем случае это оказалось CATALOG_PRICE_1 . Стоит обратить внимание, что в случае с ценой использовать нужно название того поля, которые содержит значение цены без валюты.

И передадим полученные данные в переменную $sortBy :

И передадим значения в параметры компонента:

Вот собственно и все. В результате получится примерно такая строка:

Теперь пользователь может сортировать товары и выбирать сколько товаров он хочет видеть на странице, и разумеется переходить по страницам и фильтровать товары ничего не теряя.

Источник

Количество товара на складе

Илья Чернышов, здравствуйте!
А подробнее — на Ваш взгляд какой механизм необходимо использовать, чтобы получить доступ
к остаткам товара на складе?

Например, для шаблона catalog.section
конструкция вида

$ar_res = CCatalogProduct::GetByID($arElement[«ID»]);
print_r($ar_res);

в $ar_res[«QUANTITY»] возвращает 0 для всех строк выборки.
Значит этот подход не работает?

Возьмите и задайте какому-нибудь товару кол-во, например, 13.

Потом переходите на страницу с этим товаром и в шаблоне пишете строчку:

И смотрите у какой ячейки находится ваше кол-во 13. Именно с ней надо и работать. Просто не факт что кол-во будет именно в $ar_res[«QUANTITY»] она может быть например в каком-нибудь $ar_res[«QUANTITY_CATALOF_2»]

На мой взгляд вот так все.

Все просто, если структура каталога стоит из одного инфоблока КАТАЛОГ ТОВАРОВ.
Однако, если используется разделение с добавлением ПАКЕТА ПРЕДЛОЖЕНИЙ(когда есть спецификации по товару),
тогда не совсем корректно отрабатывает компонент CATALOG, в настройках которого присутствует ссылка на каталог товаров и связанный с ним инфоблок «пакет предложений», с полем связи CML2_link.
Замечу, что используется ТИПОВОЙ механизм, т.е. на уровне настроек параметров компонента, без углублений в Bitrix-API.
Результат не «Ах». в $arResult — нет поля CML2_link.
Однако, если воспользоваться конструкцией вида:
//$ID=»5359″; для товара в инфоблоке КАТАЛОГ ТОВАРОВ
$ID=»5359″;
$ar_res = CCatalogProduct::GetByIDEx($ID);
echo «
Товар с кодом «.$ID.» имеет следующие параметры:»;
//$ID=»18142″;для товара в инфоблоке ПАКЕТ ПРЕДЛОЖЕНИЙ
$ID=»18142″;
$ar_res = CCatalogProduct::GetByIDEx($ID);
echo «
Товар с кодом «.$ID.» имеет следующие параметры:»;

для $ID=»18142″ в $arResult будет ожидаемое поле связи CML2_link со своим VALUE для остатка товара на складе и ссылкой на ID товара в каталоге товаров.
Но в типовом шаблоне выборка идет сперва по инфоблоку каталога товаров, и это в шаблоне OFFERS, который и предназначен для работы в связке двух инфоблоков!
Буду признателен за идеи, как «руками» вытянуть значение остатка на складе(QUANTITY).

Источник

Как получить количество товара в каталоге в 1с Bitrix?

В шаблоне catalog.element нужно получить количество каждого товара из каталога. То есть я получил сейчас основные разделы каталога (пример ниже), но не могу посчитать количество товаров в каждой секции. У меня есть ID, но через команду ниже вовзращается false, проверял ID — такие существуют. Не понимаю как это сделать.

ПРИМЕР:
1. Розы (получил ID, нужно посчитать, что товара 2)
1.1 Красные
1.2 Белые
2. Тюльпаны (получил ID, нужно посчитать, что товара 2)
2.1 Синие
2.2 Желтые

  • Вопрос задан более года назад
  • 893 просмотра

Простой 1 комментарий

Юпитер Макс,
[«ID»]=> string(2) «19» [«TIMESTAMP_X»]=> string(19) «28.04.2020 13:33:24» [«MODIFIED_BY»]=> string(1) «1» [«DATE_CREATE»]=> string(19) «28.04.2020 00:09:20» [«CREATED_BY»]=> string(1) «1» [«IBLOCK_ID»]=> string(1) «3» [«IBLOCK_SECTION_ID»]=> NULL [«ACTIVE»]=> string(1) «Y» [«GLOBAL_ACTIVE»]=> string(1) «Y» [«SORT»]=> string(3) «500» [«NAME»]=> string(31) «Арахисовая паста» [«PICTURE»]=> string(3) «230» [«LEFT_MARGIN»]=> string(1) «1» [«RIGHT_MARGIN»]=> string(1) «2» [«DEPTH_LEVEL»]=> string(1) «1» [«DESCRIPTION»]=> string(0) «» [«DESCRIPTION_TYPE»]=> string(4) «text» [«SEARCHABLE_CONTENT»]=> string(33) «АРАХИСОВАЯ ПАСТА » [«CODE»]=> string(18) «arakhisovaya-pasta» [«XML_ID»]=> NULL [«TMP_ID»]=> NULL [«DETAIL_PICTURE»]=> NULL [«SOCNET_GROUP_ID»]=> NULL [«LIST_PAGE_URL»]=> string(19) «#SITE_DIR#/catalog/» [«SECTION_PAGE_URL»]=> string(39) «#SITE_DIR#/catalog/#SECTION_CODE_PATH#/» [«IBLOCK_TYPE_ID»]=> string(7) «catalog» [«IBLOCK_CODE»]=> string(7) «catalog» [«IBLOCK_EXTERNAL_ID»]=> NULL [«EXTERNAL_ID»]=> NULL

это все данные по одному пункту меню

Назар Горбунов, вот так попробуйте сделать запрос

Источник

Как вывести количество товаров на странице в фильтре битрикс?

Как вывести количество товаров на странице в битрикс? К примеру если мы находимся в catalog/odejda и там у нас 10 товаров. А если мы находимся в catalog/djinsi то там у нас 23 товара.

Мне нужно узнать количество в catalog.smart.filter что бы не выводить фильтр если на странице менее 5 товаров.

Наверное нужно делать что то с CIBlockSection::GetList и SelectedRowsCount(), но мне не хватает знаний для этого.

1 ответ 1

Компонент smart.filter в массив который указан в настройка компонента (по умолчанию это arrFilter) собирает массив в котором находятся параметры для фильтрации. Далее этот массив попадает в компонент catalog.section а в нём уже делает getList, в котором получается массив товаров для вывода с учётом остальных параметров. Поэтому если мы выполним getList с фильтром указанным в arrFilter, то получим список товаров по заданноve фильтру. А если мы передадим в параметре arGroupBy пустой массив, то функция вернёт количество товаров, которое мы и искали.

Итоговый код для комплексного компонента:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками php битрикс или задайте свой вопрос.

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.11.2.40635

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник

Как вывести количество имеющихся в конкретном складе тех или иных товаров?

Доброго времени суток!

Помогите мне пожалуйста разобраться, всю ночь провозился с задачей, так и не удалось реализовать, хотя в интернете много постов подобных видел и уже по всякому перепробовал, но почему-то так и не вышло 🙁

В общем, у меня имеется 3 склада. Также моя корзина наполнена 4мя товарами. Задача состоит в том, чтобы вывести количество каждого имеющегося в корзине товара в каждом из складов.

То есть как-то так:
Склад_№1:
— Товар_№1: Всего на складе №1 таких товаров №1: 1шт.
— Товар_№2: Всего на складе №1 таких товаров №2: 3шт.
— Товар_№3: Всего на складе №1 таких товаров №3: 7шт.
— Товар_№4: Всего на складе №1 таких товаров №4: 0шт.

Склад_№2:
— Товар_№1: Всего на складе №2 таких товаров №1: 11шт.
— Товар_№2: Всего на складе №2 таких товаров №2: 23шт.
— Товар_№3: Всего на складе №2 таких товаров №3: 2шт.
— Товар_№4: Всего на складе №2 таких товаров №4: 31шт.

Сам я пытался делать через запросы:

Но почему-то они возвращают мне как результат bool(false) значения. За исключением второго описанного мной запроса. Второй возвращает хоть что-то, какой то товар находит не из корзины. К слову, PRODUCT_ID’ >= 12391 — именно при таком раскладе срабатывает.

Скажите пожалуйста, что можно предпринять? Быть может я запрос все-таки неправильный подаю. поправьте меня пожалуйста.

  • Вопрос задан более двух лет назад
  • 3486 просмотров

Попробовал использовать \Bitrix\Catalog\StoreProductTable::getList
Вот таблица с данными

Вот запрос

У вас в запросе
‘=PRODUCT_ID’ >= 12391,
А это:
(‘=PRODUCT_ID’ >= 12391) === false
и в итоге фильтр принимает вид
array(false, ‘=STORE_ID’ >= 2)

Ой, а у меня почему-то в таблице b_catalog_store_product такие данные:

И результат, собственно таков:

Вот, видимо, почему у меня на любой мой запрос все это время выдавало пустоту, когда я пытался передавать ID товаров с корзины, которые отличаются от данного. и поэтому результатом выборки приходил false.
Правда, я не понимаю на самом деле, как «начиняется» данная таблица? за что она отвечает? Какую связь и с чем имеет? И непонятно также почему у меня всего-лишь один товар на 3 разных склада хранится.

И спасибо Вам за Ваш ответ!

Роман Грицук, А, все, я разобрался. Так, я там наблюдаю такую картину, что товар, который с (то есть тот, который удается вывести) — он действительно имеется на всех моих 3х складах и у него поле «Количество товара» как раз «забито» значениями, которые я не могу редактировать:

В то время, как товар который лежит у меня в корзине, с не имеет «забитых» значений и отредактировать их, я также не могу:

Ничего не понимаю. почему так происходит. Я же могу их выбрать на главной странице и добавить в корзину, а значит и должно быть их какое-то определенное «количество товара» на складе. Но почему же тогда там это поле пустеет у них..

К слову, у всех товаров, что имеются у меня в корзине это поле пустеет. почему же так происходит?

Роман Грицук, Я бы даже сказал, его походу изначально нет на складе (очень странно). Потому что я только что добавил в корзину один товар (от старых моих добавленных избавился), посмотрел ID только что добавленного моего товара и на всякий случай снова удалил его из корзины, ну а потом вбил его в поиск (фильтр) в разделе: Инфоблоки -> Инструменты -> Перейти к инфоблоку / элементу. И вот что у меня вышло:

Его просто нет на складах. И такое я сделал еще с несколькими товарами, которые добавил в корзину и не удалял оттуда. И все та же картина, пробив в поиске (фильтре) его ID, глядя на вкладку Торговый каталог -> Склады я вижу, что там он пустует на всех складах.

Тогда как же на главной странице они доступны для просмотра и добавления в корзину? Причем когда добавляю в корзину, я не могу более, чем 2 товара добавить в корзину, а где-то и вовсе 1.

К слову, заметил, что такое ограничение находится в параметрах:

Ужас, я запутался уже, почему доступное количество задано, а на складах их нет?! И я не понимаю как тогда вообще работает эта связь между товарами и складами в Битриксе.

Ужас, я запутался уже, почему доступное количество задано, а на складах их нет

Потому что количество товара на складе чисто информационное поле и оно не связано с доступным количеством товара.

Связь между складами и «Доступным количеством» «работает» только при включенном складском учёте.

Судя по вашему скриншоту он включен. Могу предположить, что изначально это было не так и товарам было заполнено количество товара руками через вкладку Торговый каталог -> Параметры.

Потом в настройках ИМ был включен складской учет. Но после включения товар на складах не появился, потому что и не должен был.

Чтобы товар добавить на склад надо зайти Магазин -> Складской учет -> Документы, и там создать документ о приходе товара на склад.

НО. складской учёт нельзя использовать при активной интеграции с 1С

Источник

Оцените статью