Вводные данные: имеем инфоблок с элементами, у которых заполнены ряд полей: стандартные и дополнительные свойства. При этом поле «название», как и ряд дополнительных свойств — не уникальны и многократно повторяются.
Задача: вывести уникальные названия элементов. И бонусом — вывести уникальные значения определенного свойства.
Задача может показаться сложной только на первый взгляд. Решается она с помощью метода CIBlockElement::GetList, с которым вы наверняка уже сталкивались.
Метод имеет следующие параметры:
arOrder
— отвечает за сортировку выборкиarFilter
— осуществляет фильтрацию выборкиarGroupBy
— группировка элементовarNavStartParams
— параметры для постраничной навигации и ограничения количества выводимых элементовarSelectFields
— массив возвращаемых полей элементаКак вы понимаете вывод уникальных значений — это ни что иное, как группировка элементов, за которую отвечает параметр arGroupBy
.
Выводим список уникальных названий элементов:
$arFilter = Array("IBLOCK_ID"=>$IBLOCK, "ACTIVE"=>"Y"); $arGroupBy = Array("NAME"); $res = CIBlockElement::GetList(Array("NAME"=>"ASC"), $arFilter, $arGroupBy); while($arFields = $res->GetNext()) { echo "<div>".$arFields['NAME']." - ".$arFields['CNT']."</div>"; }
Нюанс состоит в том, что при группировке элементов параметр arSelectFields
— игнорируется.
В массиве $arFields
будет содержаться два поля:
Для выборки списка уникальных значений свойств подходит точно такая же конструкция:
$arFilter = Array("IBLOCK_ID"=>$IBLOCK, "ACTIVE"=>"Y"); $arGroupBy = Array("PROPERTY_TIME"); $res = CIBlockElement::GetList(Array("PROPERTY_TIME"=>"ASC"), $arFilter, $arGroupBy); while($arFields = $res->GetNext()) { echo "<div>".$arFields['PROPERTY_TIME_VALUE']." - ".$arFields['CNT']."</div>"; }
Оставить комментарий