А как сделать, чтобы выбирались не только соседи, а можно было листать товары до конца текущей секции?
На данный момент листаются только соседние элементы.
На данный момент листаются только соседние элементы.
Код |
---|
<? //Добавление Следующий Предыдущий товар для детального шаблона товара// сортировка, показываем сначала товар с изображениями $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"] лежат массивы с информацией о соседних элементах ?> |