whatsapp
Создание сайтов на 1С-Битрикс

Cледующая предыдущая новость с названиями

Каждому сайту нужна понятная и удобная навигация. К сожалению, в Битрикс отсутствует функционал перехода к следующей и предыдущей новости при детальном просмотре. Что ж, сделаем его сами :)

Cледующая предыдущая новость с названиями Каждому сайту нужна понятная и удобная навигация. К сожалению, в Битрикс отсутствует функционал перехода к следующей и предыдущей новости при детальном просмотре. Что ж, сделаем его сами :)
Первым делом вставляем в файл result_modifier.php в шаблоне детальной новости (по пути: templates/Ваш_шаблон/components/bitrix/news/
.default/bitrix/news.detail/­.default/result_modifier.php) следующий код:

// сортировку берем из параметров компонента
$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();

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;


Далее вставляем в нужное место файла template.php (по тому же пути):

<div class="toleftright">
<?if(is_array($arResult["TOLEFT"])):?> 
   <a href="<?=$arResult["TOLEFT"]["URL"]?>" class="toleft"> 
      <?=$arResult["TOLEFT"]["NAME"]?> 
   </a> 
<?endif?>
<?if(is_array($arResult["TORIGHT"])):?> 
   <a href="<?=$arResult["TORIGHT"]["URL"]?>" class="toright"> 
      <?=$arResult["TORIGHT"]["NAME"]?>
   </a> 
<?endif?>
</div>


И в styles.css добавляем:

.toleftright {
display: flex;
justify-content: space-between;
margin-top: 3em;
}

.toleftright a {
max-width: 45%;
}

.toleft {
padding-left: 1.5em;
position: relative;
}

.toleft:before {
content: "←";
position: absolute;
left: 0;
}

.toright {
padding-right: 1.5em;
position: relative;
text-align: right;
}

.toright:before {
content: "→";
position: absolute;
right: 0;
}


Вот так выглядит получившаяся навигация:
screenshot.png

И можете скачать все коды одним файлом:

Скачать архив: bitrix-navigation.zip

Логотип SiteBERG
Изменено: 13.06.2021 02:16