И снова мы возвращаемся к Битриксу ;) Чувствую про него будет еще десяток постов. Во время работы над проектом всегда возникают какие-то вопросы, требующие либо нетривиального подхода, либо поиска информации. Естественно, все они решаются, и вот методом их решения, как раз и хочется "поделиться с потомками". Мало ли кому будет полезным. Итак представьте, что у нас есть некий массив $arResult['ELEMENTS'] полученный из элементов инфоблока. Чтобы пример не был таким абстрактным, в качестве примера возьмем компонент bitrix:iblock.element.add.list, который выводит список Список своих элементов с привязкой к пользователю. Т.е. к примеру, если у вас "Доска объявлений", то у пользователя в личном кабинете должен быть доступен список объявлений которые он подавал. Но вот беда ... компонент выводит элементы пользователя в $arResult['ELEMENTS'], который с помощью свойств компонента никак нельзя ни отсортировать, ни изменить и т.п. Что несколько неудобно. Например, нам нужно вывести все объявления пользователя, начиная с последнего ...
На помощь нам придет result_modifier.php и Класс для сортировки массива, usort [php]. Исходный код класса:
Автор приводит такой пример вызова:
Но нам нужно отсортировать объяления по дате создания. Поэтому внутри result_modifier.php мы поступаем следующим образом:
В результате объявления отсортированы у нас по дате. Профит. Хочется сказать спасибо автору блога yunaliev.ru за сэкономленное время и универсальный метод.
На помощь нам придет result_modifier.php и Класс для сортировки массива, usort [php]. Исходный код класса:
class CCabinet_SortObject { function __cmp_ValueOf($a, $b, $name, $order) { if(is_set($a[$name]) && is_set($b[$name])) { if($order == 'ASC') return ($a[$name]<$b[$name])?true:false; elseif($order == 'DESC')return ($b[$name]>$a[$name])?false:true; } } function cmp_STATUS_ASC($a, $b) { return CCabinet_SortObject::__cmp_ValueOf($a, $b, "STATUS", "ASC"); } function cmp_STATUS_DESC($a, $b) { return CCabinet_SortObject::__cmp_ValueOf($a, $b, "STATUS", "DESC"); } function cmp_NAME_ASC($a, $b) { return CCabinet_SortObject::__cmp_ValueOf($a, $b, "OBJECT_NAME", "ASC"); } function cmp_NAME_DESC($a, $b) { return CCabinet_SortObject::__cmp_ValueOf($a, $b, "OBJECT_NAME", "DESC"); } function cmp_CITY_ASC($a, $b) { return CCabinet_SortObject::__cmp_ValueOf($a, $b, "CITY_NAME", "ASC"); } function cmp_CITY_DESC($a, $b) { return CCabinet_SortObject::__cmp_ValueOf($a, $b, "CITY_NAME", "DESC"); } function cmp_DATE_DESC($a, $b) { if ($a["DATE_CREATE"] == $b["DATE_CREATE"]) { return 0; } return ($a["DATE_CREATE"] > $b["DATE_CREATE"]) ? -1 : 1; } function cmp_DATE_ASC($a, $b) { if ($a["DATE_CREATE"] == $b["DATE_CREATE"]) { return 0; } return ($a["DATE_CREATE"] < $b["DATE_CREATE"]) ? -1 : 1; } }
Автор приводит такой пример вызова:
usort($arResult['ITEAM'], array("CCabinet_SortObject", "cmp_".$arParams['SORT_BY']."_".$arParams['SORT_ORDER']));
Но нам нужно отсортировать объяления по дате создания. Поэтому внутри result_modifier.php мы поступаем следующим образом:
usort($arResult['ELEMENTS'], array("CCabinet_SortObject", "cmp_"."DATE"."_"."DESC"));
В результате объявления отсортированы у нас по дате. Профит. Хочется сказать спасибо автору блога yunaliev.ru за сэкономленное время и универсальный метод.
Комментариев нет :
Отправить комментарий