На входе есть массив с ID элементов. Они находятся в массиве в том порядке, в котором нужно организовать вывод (например, получены из компонента поиска с сортировкой по релевантности)
$arItemsID = [/* массив ID элементов в нужном порядке */];
$ob = \CIblockElement::GetList(
[
'ID' => 'LIST', // новый тип сортировки
],
['ID' => $arItemsID]
);
while ($arItem = $ob->Fetch()) {
// элементы выводятся в порядке попадания в массив $arItemsID
} |
Для этого нужно в функцию \CIblockElement::PrepareGetList() добавить такой код
if (count($arOrder) == 1 && $arOrder['ID'] == 'LIST' && array_key_exists('ID', $arFilter)) {
$arSqlOrder['ID'] = 'FIELD(BE.ID, \''.implode('\',\'', $arFilter['ID']).'\')';
} |