На новостных сайтах, в разделе детального просмотра новости, зачастую стоят ссылки на предыдущую и следующую новость по хронологии. Сделать подобные ссылки в Битриксе довольно легко. Для этого понадобится параметр nElementID функции GetList для элементов инфоблоков.
Как гласит документация к функции CIBlockElement::GetList:
"nElementID" - ID элемента который будет выбран вместе со своими соседями. Количество соседей определяется параметром nPageSize. Например: если nPageSize равно 2-м, то будут выбраны максимум 5-ть элементов.
ID новости всегда можно получить из массива $arResult['ID'], находясь в шаблоне детального просмотра news.detail.
Поэтому PHP код будет выглядеть примерно так:
$nearPost = array();
$arSelect = Array('ID', 'IBLOCK_ID', 'NAME', 'DETAIL_PAGE_URL');
$arFilter = Array('IBLOCK_ID'=>'ID_НУЖНОГО_ИНФОБЛОКА');
$res=CIBlockElement::GetList(array('ACTIVE_FROM' => 'DESC'), $arFilter, false,
array('nElementID'=>$arResult['ID'], 'nPageSize'=>1),
$arSelect);
while($arRes=$res->GetNext()){$nearPost[] = array(
'ID'=> $arRes['ID'],
'NAME'=> $arRes['NAME'],
'URL' => $arRes['DETAIL_PAGE_URL']);
}
Результат может получиться в трёх вариантах:
- Текущая новость последняя по хронологии. Поэтому $nearPost будет содержать 2 новости: текущую и предыдущую
- Текущая новость первая по хронологии. $nearPost будет содержать 2 новости: текущую и следующую
- Существуют более поздняя и ранняя новости. Поэтому $nearPost будет содержать 3 новости: следующую, текущую, предыдущую
Остаётся только вывести результат для всех этих трёх случаев:
<?if(count($nearPost) == 2 && $arResult['ID'] == $nearPost[0]['ID']){?>
Предыдущая новость:
<a href="<?=$nearPost[1]['URL']?>"><?=$nearPost[1]['NAME']?></a><?}elseif(count($nearPost) == 2 && $arResult["ID"] == $nearPost[1]['ID']){?>
Следующая новость:
<a href="<?=$nearPost[0]['URL']?>"><?=$nearPost[0]['NAME']?></a><?}elseif(count($nearPost) == 3){?>
Предыдущая новость:
<a href="<?=$nearPost[2]['URL']?>"><?=$nearPost[2]['NAME']?></a>Следующая новость:
<a href="<?=$nearPost[0]['URL']?>"><?=$nearPost[0]['NAME']?></a><?}?>