Вывести минимальную и максимальную цену в разделе каталога Битрикс.

Просмотров: 6324

Что бы вывести минимальную и максимальную стоимость товаров, из каталога 1С-Битрикс, достаточно получить все товары методом CIBlockElement::GetList  и загнать цены в массив

Получаем все товары каталога

Для начала получаем цены всех товаров каталога и загоняем их в массив $arPrices

$resPrice = CIBlockElement::GetList(
    array(
            "CATALOG_PRICE_2" => "ASC"
    ),
    array(
            "SECTION_ID" => $arResult['~ID']
    ),
    false,
    false,
    array(
            "CATALOG_PRICE_2"
    )
);
while ($getPrices = $resPrice->Fetch()) {
    $arPrices[] = $getPrices['CATALOG_PRICE_2'];
}

В параметре сортировки указали, что элементы должны выстроиться по нарастающей по параметру цены с кодом 2: "CATALOG_PRICE_2" => "ASC"

Если нужно по вывести цены в конкретном разделе каталога (или в каждом) размещаем этот код в section.php комплексного шаблона каталога и передаем в фильтр SECTION_ID - собственно ID раздела.

Что бы получить ID раздела (и прочую информацию), находясь в файле section.php можно воспользоваться заметкой Получить все поля раздела, включая пользовательские, в section.php

Получаем первый и последний элементы массива

Дальше все просто, обычным php получаем первый и последний элементы массива $arPrices. Соответственно, в первом элементе у нас минимальная цена, в последнем максимальная

Используем встроенные в php функции array_shift - извлекает первый элемент массива и array_pop - извлекает последний элемент массива


$minPrice = array_shift($arPrices);
$maxPrice = array_pop($arPrices);

Теперь, в переменных $minPrice и $maxPrice у нас минимальная и максимальная цена товара. Таким же образом, используя CIBlockElement::GetList можно получать и сортировать любую информацию о товарах.

Гость 09.04.2023
Михаил, выводится минимальная базовая цена товара, но если у товара скидка - она не учитывается. Можно как-то вывести минимальную цену с учётом скидок на товары?
Михаил Базаров 09.04.2023
Примерная наводка, сейчас негде проверить и дописать. Если справитесь, напишите готовый код (если нет, то смогу в сл выходные)
Нужен метод CCatalogProduct::GetDiscountGroupList (инфа о скидках по ID товара)
Код
$resPrice = CIBlockElement::GetList(
  Array(
    "CATALOG_PRICE_2" => "ASC"
  ),
  Array(
        "SECTION_ID"=>$arResult['~ID']
  ), 
  false,
  false,
  Array(
     "ID",
     "CATALOG_PRICE_2"
  )
);
while($getPrices = $resPrice->Fetch()) {
    // Получение скидок ID текущего товара
    $discounts = CCatalogProduct::GetDiscountGroupList(
        $getPrices['ID']
    );
    // Получение информации о каждой скидке
    foreach ($discounts as $discount) {
        $discountInfo = CCatalogDiscount::GetByID(
            $discount['ID']
        );
        /*
        Здесь вычитаем скидку из цены товара
        */
    }
    // 
    // Если скидка есть, загоняем вычисленное значение в $arPrices[]
    // Иначе, просто $getPrices['CATALOG_PRICE_2']
}

На деле может оказаться много зависимостей: скидка по периоду, скидка на количество и прочие условности скидки.
Нужно на конкретном проекте адаптироваться.

Блог-note: заметки разработчика

Ajax форма обратной связи, реализация в битрикс

Иногда, на сайте требуется создать форму обратной связи, которая будет писать все данные в инфоблок. Способов реализации...

Удаление недоступных для заказа товаров из корзины

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

Memcached на сайте под управлением битрикс, при использовании Веб Окружения Битрикс

Если вам важна скорость отдачи сайта, а у вашего сервера медленный диск для использования кеша на файлах. Можно кеширова...

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

Задача: Каждый час нужно обновлять свойство элементов/товаров с типом строка "В наличии", вписывать в него либ...

Показать пользователю накопительную скидку за все сделанные заказы, из модуля маркетинга

Задача: показать, текущему авторизованному, пользователю сумму всех выполненных заказов и процент накопительной скидки- ...

Получить и вывести данные из профиля покупателя в кабинете пользователя 1С-Битрикс

Задача: вывести пользователю информацию по всем, его, профилям покупателя в компоненте sale.personal.profile.list без пе...

Автоматическая загрузка каталогов из csv файлов в Битрикс

Если требуется настроить автоматический импорт каталогов из csv файлов, от поставщиков. В 1С-Битрикс, уже есть весь не...

Input Type File, множественный с дропзоной и показом превью

Задача: Сделать возможность загрузки файлов в множественный input type="file" c помощью drag&drop и показом превью загру...

Получить множественное пользовательское поле раздела. Значения множественного UF_ поля через API

Задача: У разделов инфоблока есть множественное поле типа список. Зная ID раздела, нужно получить и вывести всю информац...