Получение соседних элементов новости по дате активности в 1С Битрикс

Получение соседних элементов новости по дате активности в 1С Битрикс

12.03.2023
309
Пример кода для получения соседних элементов (новостей) по дате активности.

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

Для получения соседних элементов новости по дате начала активности мы можем использовать следующий код:

$active_from = date('d.m.Y H:i:s', strtotime($arResult['ACTIVE_FROM'])); // получаем дату активности текущего элемента новости
$pn_nav = []; // создаём массив для хранения ссылок на предыдущий и следующий элементы новости
$arSelect = array("ID", "NAME", "DETAIL_PAGE_URL","DATE_ACTIVE_FROM","DATE_ACTIVE_TO"); // выбираем необходимые поля для вывода
$arFilter = array(
    "IBLOCK_ID" => $arResult["IBLOCK_ID"],
    "ACTIVE"=>"Y",
    "ACTIVE_DATE"=>"Y",
    "SECTION_CODE" => "news",
    ">=DATE_ACTIVE_FROM" => $active_from, // фильтруем элементы с датой активности больше или равной дате активности текущего элемента
    "!ID" => $arResult["ID"], // исключаем текущий элемент
);
$res = CIBlockElement::GetList(["ACTIVE_FROM" => "ASC"], $arFilter, false, array("nPageSize" => 1), $arSelect); // получаем предыдущий элемент
while($ob = $res->Fetch()) {
    $pn_nav['prev'] = '/'.$arrFilter['SECTION_CODE'].'/'.$ob['CODE'].'/'; // добавляем ссылку на предыдущий элемент в массив
}

$arFilter = array(
    "IBLOCK_ID" => $arResult["IBLOCK_ID"],
    "ACTIVE"=>"Y",
    "ACTIVE_DATE"=>"Y",
    "SECTION_CODE" => "news",
    "<=DATE_ACTIVE_FROM" => $active_from, // фильтруем элементы с датой активности меньше или равной дате активности текущего элемента
    "!ID" => $arResult["ID"], // исключаем текущий элемент
);
$res = CIBlockElement::GetList(["ACTIVE_FROM" => "DESC"], $arFilter, false, array("nPageSize" => 1), $arSelect); // получаем следующий элемент
while($ob = $res->Fetch()) {
    $pn_nav['next'] = '/'.$arrFilter['SECTION_CODE'].'/'.$ob['CODE'].'/'; // добавляем ссылку на следующий элемент в массив
}

$arResult['pn_nav'] = $pn_nav; // сохраняем массив со ссылками в массиве с данными текущего элемента новости

Данный код использует функции CIBlockElement::GetList() и date(), чтобы получить соседние элементы новости по дате активности.

Для использования этого кода на странице детального просмотра новости необходимо его добавить в файл result_modifier.php шаблона вывода детальной новости, который отвечает за вывод информации о текущей новости. Затем можно использовать массив $arResult['pn_nav'] для вывода ссылок на предыдущий и следующий элементы новости в шаблоне компонента.

Заключение

Данный пример может быть полезен при разработке сайтов на 1С Битрикс, если необходимо выводить ссылки на предыдущий и следующий элементы новости на странице детального просмотра новости. Это поможет улучшить пользовательский опыт и упростить навигацию для пользователей сайта.