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

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

Что бы вывести минимальную и максимальную стоимость товаров, из каталога 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']
}

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