Давайте рассмотрим один из вариантов реализации поставленной задачи.
Для начала шаблоне детального элемента каталога или в детальной новости создадим файл result_modifier.php. В него необходимо добавить следующий код:
<?
$res = CIBlockElement::GetList(
array(
'sort' => 'asc'
),
array(
'IBLOCK_ID' => 1, // здесь ID инфоблока, в котором находится элемент
'ACTIVE' => 'Y',
'SECTION_ID' => $arResult['IBLOCK_SECTION_ID']
),
false,
array(
'nElementID' => $arResult['ID'],
'nPageSize' => 1
)
);
$nearElementsSide = 'LEFT';
while ($arElem = $res->GetNext()) {
if ($arElem['ID'] == $arResult['ID']) {
$nearElementsSide = 'RIGHT';
continue;
}
$arResult['NEAR_ELEMENTS'][$nearElementsSide][] = $arElem;
}
?>Функцией GetList получаем список элементов. В элементе массива ‘nPageSize’ => можно указать сколько элементов выводить справа и слева от текущего. В нашем случае всего будет выведено 3 элементов: 1 предыдущих, 1 текущий и 1 следующих, если каждый из перечисленных существует. Если же выбранный элемент находится на первой или последней позиции, то выведется 2 элемента (без предыдущего или последующего соответственно).
Переменная $nearElementsSide введена для того чтобы разделить элементы в массиве $arResult[‘NEAR_ELEMENTS’] на предыдущие и последующие, для удобства.
Теперь в шаблоне детального элемента каталога или детальной новости будет доступен дополнительный массив $arResult[‘NEAR_ELEMENTS’] в котором будут элементы с двумя ключами:
- LEFT — предыдущие элементы
- RIGHT — последующие элементы