прям красота :D все разделы, что за жесть.
а так вводных нет, что значит следующий и предыдущий раздел, разделы это все таки дерево.
Надо на одном уровне вложенности или надо вверх/вниз по дереву, родительский и дочерний (дочерних много может быть) ?
Родительский раздел и в нем подразделы (много), по ним нужно вперед и назад.
по ним, это по дочерним разделам вперед/назад? и ты знаешь ID родительского раздела? в моем понимании это на одном уровне вложенности.
в чем проблема то?
следующий и предыдущий это что? ID? сортировка? хотя тут особо без разницы
ну два запроса, если через API, допустим по полю ID
$id = 1; // id родительского
$fied = 'ID'; // поле по которому определяется след/пред раздел (можно и SORT, самое главное чтобы отличалось)
$fieldValue = 100; // значение поля для поиска след/пред раздела
// https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblocksection/getlist.php
// след:
$arFilter = ['IBLOCK_SECTION_ID' => $id, ">$field" => $fieldValue];
$arNavStartParams = ['nTopCount' => 1]; // нам нужен один раздел
$arOrder = [$field => 'ASC'];
// предыдущий аналогично, только "<$field" => $fieldValue, и сортировка в другую сторону
не то, вот нашел, работает но для элементов, не получается для разделов переделать
<?
// сортировку берем из параметров компонента
$arSort = array(
$arParams["SORT_BY1"]=>$arParams["SORT_ORDER1"],
$arParams["SORT_BY2"]=>$arParams["SORT_ORDER2"],
);
// выбрать нужно id элемента, его имя и ссылку. Можно добавить любые другие поля, например PREVIEW_PICTURE или PREVIEW_TEXT
$arSelect = array(
"ID",
"NAME",
"DETAIL_PAGE_URL"
);
// выбираем активные элементы из нужного инфоблока. Раскомментировав строку можно ограничить секцией
$arFilter = array (
"IBLOCK_ID" => $arResult["IBLOCK_ID"],
"SECTION_CODE" => $arParams["SECTION_CODE"],
"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"])
$arResult["TORIGHT"] = Array("NAME"=>$arItems[0]["NAME"], "URL"=>$arItems[0]["DETAIL_PAGE_URL"]);
else
$arResult["TOLEFT"] = Array("NAME"=>$arItems[1]["NAME"], "URL"=>$arItems[1]["DETAIL_PAGE_URL"]);
endif;
// в $arResult["TORIGHT"] и $arResult["TOLEFT"] лежат массивы с информацией о соседних элементах
?>