Получить предыдущий и следующий элементы

Задача:
В CMS битрикс для текущего товара получить ссылки на предыдущий и следующий элемент (по id).
Решение:
Можно воспользоваться параметром arNavStartParams метода CIBlockElement::GetList. Т.е. в четвёртый аргумент CIBlockElement::GetList передаём в параметр nElementIDid элемента, для которого нужно найти соседей. Чтобы он нашел только одного соседа сверху и снизу ограничиваем выборку параметром nPageSize.
При этом нужно выполнить следующие указания, чтобы метод сработал:

  • 3-ий аргумент(arGroupBy) метода GetList должен быть равен false.
  • Последний аргумент(arSelectFields) метода GetList должен содержать ID.
  • Должна быть задана сортировка по ID.

Нюансы результата выборки:

  • Если ID, для которого ищутся соседи, последний, то сосед сверху будет отсутствовать.
  • Сортировка по "catalog_*" учитываться не будет.
  • В результате метода добавится поле RANK(порядковый номер элемента в «полной» выборке).

Реализация:

<?php 

// id инфоблока
$IBLOCK_ID = 1;
// id элемента для которого ищем соседей 
$ID = 31; 

$query = CIBlockElement::GetList(array('ID' => 'ASC'), array(
   'IBLOCK_ID' => $IBLOCK_ID,
   'ACTIVE' => 'Y',
   'SECTION_GLOBAL_ACTIVE' => 'Y'),
   false, array('nPageSize' => 1, 'nElementID' => $ID),
   array('ID', 'DETAIL_PAGE_URL')
);
while($elem = $query->GetNextElement()){
	$arFields = $elem->GetFields();
	var_dump($arFields['RANK']);
	var_dump($arFields['ID']);
	var_dump($arFields['DETAIL_PAGE_URL']);
}
?>

Результат:

битрикс получить предыдущий и следующий элемент

Если использовать данный код в шаблоне детальной страницы в комплексном компоненте, то вместо $ID нужно передавать $arResult['ID'] и поместить весь код в файл result_modifier.php рабочего шаблона детальной страницы.

Для чего это может понадобиться:  данный приём можно использовать для SEO оптимизации сайта, как вариант для внутренней перелинковки.

Рекомендуем к прочтению:



2 комментария

  • Юля:

    Спасибо за статью, а что вернет код, если это последний id?
    Думала как раз внедрить такую линковку в карточке товара.

  • Александр:

    Если текущий элемент крайний снизу или сверху, возвращается два элемента: соответственно, один элемент — текущий и еще один соседний, либо справа, либо слева. Для последнего сначала вернется предыдущий, потом текущий.
    Недавно думал, как эти две ситуации можно изящно обработать, все равно получилась куча условий.

Оставить комментарий

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.