вывести минимальную цену товара в раздел (section.list)

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

Это конечно проще и быстрее, но цена на товар постоянно меняется.
Следовательно придется либо вручную отслеживать и менять цену, либо при обновлении товаров по событию сравнивать существующую цену с новыми ценами товаров и выбирать минимальную.

Каталог сайта имеет структуру:

Корневой раздел - коллекции - товары.

Вот для раздела коллекции нужно вывести минимальную цену товара этой коллекции. Такая заманушка :)


У нас в коллекции не может быть более 20 товаров. Если в разделе 100 товаров и более данный способ может оказаться неэффективным и вызвать тормоза. Но нужно конечно попробовать...

Алгоритм.

При выводе коллекций в section.list будем получать список всех цен товаров и выводить минимальную.

Чтобы не перегружать шаблон catalog.section.list выведем функцию в init.php


Как реализовать.

Создаем файл init.php (если его нет) в Контент\Структура сайта\Файлы и папки\bitrix\php_interface\init.php

Поместим в него процедуру:

function price($id)
{
$arSelect = Array("ID", "NAME", "PROPERTY_CML2_BASE_UNIT");
$arFilter2 = Array("IBLOCK_ID"=> 2, "SECTION_ID"=> $id, "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array(), $arFilter2, false, Array("nTopCount" => 50, "nPageSize"=>50), $arSelect);
$minPrice=1000000; // тут будет минимальная цена
while($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields();
// цена
$price = CPrice::GetBasePrice($arFields['ID']);
if ($arFields['PROPERTY_CML2_BASE_UNIT_VALUE']=='м2') // для м2
{ // для м2
if ($minPrice>$price['PRICE'] and $price['PRICE']!=0) $minPrice=$price['PRICE'];
} // для м2

}
if ($minPrice==1000000) $minPrice='--';

//echo $minPrice; // МИНИМАЛЬНАЯ ЦЕНА ДЛЯ М2
echo number_format($minPrice, 0, '.', ' ').' руб.';
unset($res);
}

Мне нужна была мин цена для м2 (а есть еще товар в шт). Если нужна просто мин цена убрать строки с комментарием // для м2


Функция принимает id раздела.


Теперь вызовем ее из шаблона catalog.section.list и получим цену.

Шаблон находится тут: /bitrix/templates/.default/components/bitrix/catalog/_ваше_имя_шаблона_/bitrix/catalog.section.list/.default

Если его тут нет, то скопируйте его вот так: