вывести минимальную цену товара в раздел (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

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




Находим в тексте case: 'TILE' - если у вас выбран "вид списка подразделов = плитка"

И где-нибудь там указываем что надо вывести мин цену.

ИД раздела находится в $arSection['ID']


Пишем такую строку в шаблон:

<p align="center" class="bx_catalog_tile_title">от <?price($arSection['ID'])?> за м2</p>



и получаем мин цену.

Таким способом можно вообще для раздела вывести любое свойство: количество элементов в разделе, производителя, типы элементов раздела и т.п.

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

Некоторые вебмастера чтобы обновлять картинки разделов из 1с автоматически, создают в разделе товар с картинкой. Товар не выводят а картинку используют для раздела.



Спасибо за внимание, если есть вопросы - пишите :)