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

Задача:
В 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 оптимизации сайта, как вариант для внутренней перелинковки.

ПоделитьсяShare on Facebook0Share on VKShare on Google+0Tweet about this on TwitterShare on LinkedIn0Pin on Pinterest0

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

  • Юля:

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

  • Александр:

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

Добавить комментарий