От версии битрикса зависеть не должно, тут используется API инфоблоков, а оно уже давно "устоялось". От себя добавлю что не плохо бы кеш пересобрать после того как модифицировали $arResult в result_modifier.php. Делается это примерно так (для данного примера:
В таком случаи компонент бодет полностью поддерживать все функции кеширования. Иначе результаты работы файла result_modifier.php могут попросту отвалиться.
А как сделать, чтобы выбирались не только соседи, а можно было листать товары до конца текущей секции? На данный момент листаются только соседние элементы.
Код
<? //Добавление Следующий Предыдущий товар для детального шаблона товара// сортировка, показываем сначала товар с изображениями
$arSort = array(
"HAS_DETAIL_PICTURE"=>"desc,nulls",
);
// выбрать нужно id элемента, его имя и ссылку. Можно добавить любые другие поля, например PREVIEW_PICTURE или PREVIEW_TEXT
$arSelect = array(
"ID",
"NAME",
"DETAIL_PAGE_URL"
);
// выбираем активные элементы из нужного инфоблока. Ограничиваемся секцией.
$arFilter = array (
"IBLOCK_ID" => $arResult["IBLOCK_ID"],
"SECTION_ID" => $arParams["SECTION_ID"],
"ACTIVE" => "Y",
"CHECK_PERMISSIONS" => "Y",
);
// выбирать будем по 1 соседу с каждой стороны от текущего
$arNavParams = array(
"nPageSize" => 1,
"nElementID" => $arResult["ID"],
);
$arItems = Array();
$rsElement = CIBlockElement::GetList($arSort, $arFilter, false, $arNavParams, $arSelect);
$rsElement->SetUrlTemplates($arParams["DETAIL_URL"]);
while($obElement = $rsElement->GetNextElement())
$arItems[] = $obElement->GetFields();
// возвращается от 1го до 3х элементов в зависимости от наличия соседей, обрабатываем эту ситуацию
if(count($arItems)==3):
$arResult["TORIGHT"] = Array("NAME"=>$arItems[0]["NAME"], "URL"=>$arItems[0]["DETAIL_PAGE_URL"]);
$arResult["TOLEFT"] = Array("NAME"=>$arItems[2]["NAME"], "URL"=>$arItems[2]["DETAIL_PAGE_URL"]);
elseif(count($arItems)==2):
if($arItems[0]["ID"]!=$arResult["ID"]) {
// Делаем доп запрос с указанием сортировки, в данном примере по ID получаем последний элемент ( array("" => "DESC") ), ограничиваем количество до одного.
$rsElementLast = CIBlockElement::GetList(array("ID"=>"DESC"), $arFilter, false, array("nPageSize" => 1), $arSelect);
$rsElementLast->SetUrlTemplates($arParams["DETAIL_URL"]);
if($obElementLast = $rsElementLast->GetNextElement()){
$arItemLast = $obElementLast->GetFields();
$arResult["TOLEFT"] = array("NAME" => $arItemLast["NAME"], "URL"=>$arItemLast["DETAIL_PAGE_URL"]);
}
$arResult["TORIGHT"] = Array("NAME"=>$arItems[0]["NAME"], "URL"=>$arItems[0]["DETAIL_PAGE_URL"]);
}
else {
// Делаем доп запрос с указанием сортировки, в данном примере по ID получаем первый элемент ( array("ID" => "ASC") ), ограничиваем количество до одного.
$rsElementFirst = CIBlockElement::GetList(array("ID"=>"ASC"), $arFilter, false, array("nPageSize" => 1), $arSelect);
$rsElementFirst->SetUrlTemplates($arParams["DETAIL_URL"]);
if($obElementFirst = $rsElementFirst->GetNextElement()){
$arItemFirst = $obElementFirst->GetFields();
$arResult["TORIGHT"] = array("NAME" => $arItemFirst["NAME"], "URL"=>$arItemFirst["DETAIL_PAGE_URL"]);
}
$arResult["TOLEFT"] = Array("NAME"=>$arItems[1]["NAME"], "URL"=>$arItems[1]["DETAIL_PAGE_URL"]);
}
endif;// в $arResult["TORIGHT"] и $arResult["TOLEFT"] лежат массивы с информацией о соседних элементах
?>