Телеграм: @camouf_ru Почта: mihail@bazarow.ru

Следующая/предыдущая новость/статья при просмотре подробной в Битрикс

Странное дело, в Битрикс по умолчанию, отсутсвует функционал для навигации внутри новостей или статей аля "Следующая/Предыдущая" при подробном просмотре. Давайте вставим?

Собственно все элементарно: в шаблон news.detail , в нужном месте, достаточно вставить вот такой код

<?$rs=CIBlockElement::GetList(array("active_from" => "desc"), array("ACTIVE"=>"Y", "IBLOCK_ID"=>$arResult["IBLOCK_ID"]), false, array("nElementID"=>$arResult["ID"], "nPageSize"=>1), array("ID"));
while($ar=$rs->GetNext())
{ $page[] = $ar["ID"]; }?>

<?if (count($page) == 2 && $arResult["ID"] == $page[0]):?>
<a href="/путь для ЧПУ/<?=$page[1]?>/">Предыдущая</a>

<?elseif (count($page) == 3):?>
<a href="/путь для ЧПУ/<?=$page[0]?>/">Следующая</a>

<a href="/путь для ЧПУ/<?=$page[2]?>/">Предыдущая</a>

<?elseif (count($page) == 2 && $arResult["ID"] == $page[1]):?>
<a href="/путь для ЧПУ/<?=$page[0]?>/">Следующая</a>
<?endif;?>  

Само собой привел безо всякого оформления, вы сможете назначить свои классы или списки для ссылок. Пример работы: собственно под этим текстом. Удачного допиливания битрикс под удобства ).

Просмотров: 15331 | Комментариев: 9

Комментарии

Внимание! все сообщения проходят премодерацию. Ваше сообщение появится после проверки
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Защита от автоматических сообщений
Загрузить файл
Нажимая кнопку "Отправить", Вы принимаете условия
Политики конфиденциальности и обработки персональных данных
Гость сайта
Можно ли сделать так, чтобы в ссылку выводился не id, а символьный код ?
Имя Цитировать
Михаил Базаров
Цитата
Гость сайта пишет:
Можно ли сделать так, чтобы в ссылку выводился не id, а символьный код ?
Можно попоробовать вписать CODE вместе ID - но надо пробовать
Имя Цитировать
Михаил Базаров
Более феншуйный и правильный вариант:

В 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();
// возвращается от 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"] лежат массивы с информацией о соседних элементах
?> 

В нужном месте шаблона детальной новости

Код
<?if(is_array($arResult["TOLEFT"])):?> 
   <a href="<?=$arResult["TOLEFT"]["URL"]?>"> 
      < <?=$arResult["TOLEFT"]["NAME"]?> 
   </a> 
<?endif?>
<?if(is_array($arResult["TORIGHT"])):?> 
   <a href="<?=$arResult["TORIGHT"]["URL"]?>"> 
      <?=$arResult["TORIGHT"]["NAME"]?> > 
   </a> 
<?endif?>


Сайт автора http://alexvaleev.ru/
Имя Цитировать
Ярослав
Здравствуйте Михаил!
Подскажите пожалуйста, а помимо навигации внутри статьи, как сделать разбивку статьи если в ней очень много текста на подстраницы с величиной такой подстраницы например с максимальной длинной текста не более 5000
П.С. А как вы уменьшили количество кнопок в редакторе для комментариев?
Имя Цитировать
Михаил Базаров
Цитата
Ярослав пишет:
Здравствуйте Михаил!
Подскажите пожалуйста, а помимо навигации внутри статьи, как сделать разбивку статьи если в ней очень много текста на подстраницы с величиной такой подстраницы например с максимальной длинной текста не более 5000
П.С. А как вы уменьшили количество кнопок в редакторе для комментариев?
При написании новости/статьи которую хотите разорвать на несколько страниц- прямо в в изуальном редакторе есть кнопка- так и называется "Разрыв страницы"

Настройки редактора для пользователей настраивается в Сервисы-Форум при создании нового подфорума. Просто запрещающими методами "Запретить ссылки" , "Запретить таблицы" ну итд- чтобы только работа с текстом осталось, Можно хоть все поотключать- но как же без смайликов-то  ;)
Имя Цитировать
Гость сайта
Цитата
Михаил Базаров пишет:
Цитата
Ярослав пишет:
Здравствуйте Михаил!
Подскажите пожалуйста, а помимо навигации внутри статьи, как сделать разбивку статьи если в ней очень много текста на подстраницы с величиной такой подстраницы например с максимальной длинной текста не более 5000
П.С. А как вы уменьшили количество кнопок в редакторе для комментариев?
При написании новости/статьи которую хотите разорвать на несколько страниц- прямо в в изуальном редакторе есть кнопка- так и называется "Разрыв страницы"

Настройки редактора для пользователей настраивается в Сервисы-Форум при создании нового подфорума. Просто запрещающими методами "Запретить ссылки" , "Запретить таблицы" ну итд- чтобы только работа с текстом осталось, Можно хоть все поотключать- но как же без смайликов-то
Спасибо за ответ. К сожалению нет никакой кнопки разрыв страницы или что-то в том же духе. Есть совет использовать тег <BREAK />, но в ручную его ставить если много текста это как то не очень.
Имя Цитировать
Равиль
Для символьного кода

Код
<?$rs=CIBlockElement::GetList(
            array("active_from" => "desc"), 
            array("ACTIVE"=>"Y", "IBLOCK_ID"=>$arResult["IBLOCK_ID"]), 
            false,
            array("nElementID"=>$arResult["ID"], "nPageSize"=>1), 
            array("ID", "CODE"));
  while($ar=$rs->GetNext())
      { $page[] = $ar["CODE"]; }?>
<div class="news_page">
   <ul>
   <?if (count($page) == 2 && $arResult["CODE"] == $page[0]):?>
      <li><a href="/news/<?=$page[1]?>/">Следующая новость &raquo;</a></li>
   <?elseif (count($page) == 3):?>
      <li><a href="/news/<?=$page[0]?>/">&laquo; Предыдущая новость</a></li>
<li><a class="" href="/news/<?=$page[2]?>/">Следующая новость &raquo;</a></li>
   <?elseif (count($page) == 2 && $arResult["ID"] == $page[1]):?>
<li><a href="/news/<?=$page[0]?>/">&laquo; Предыдущая новость</a></li>
<?endif;?>
   </ul>
</div>
Имя Цитировать
Владимир
Здравствуйте Михаил!
Подскажите пожалуйста, как можно сделать так, чтобы при детальном просмотре новости можно было переходить к следующей и предыдущей не по ID новости, а по числу сортировки (которое 500 по умолчанию)? Что нужно поменять в вашем коде:
Цитата
Михаил Базаров пишет:
Более феншуйный и правильный вариант:

В 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();
// возвращается от 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"] лежат массивы с информацией о соседних элементах
?> 
 

В нужном месте шаблона детальной новости
Код
 <?if(is_array($arResult["TOLEFT"])):?> 
   <a href="<?=$arResult["TOLEFT"]["URL"]?>"> 
      < <?=$arResult["TOLEFT"]["NAME"]?> 
   </a> 
<?endif?>
<?if(is_array($arResult["TORIGHT"])):?> 
   <a href="<?=$arResult["TORIGHT"]["URL"]?>"> 
      <?=$arResult["TORIGHT"]["NAME"]?> > 
   </a> 
<?endif?>
 


Сайт автора http://alexvaleev.ru/
Имя Цитировать
Александр Виноградний
Здравствуйте, Михаил!

Использую в своем проекте "Более феншуйный и правильный вариант".
Но почему-то под каждой новость выводиться толька одна ссылка (либо на предыдущую, либо на следующую), но никак не обе сразу.
Имя Цитировать
Поделиться страницей Спасибо, это помогает развивать сайт.
Мой youtube канал. Сюда я выкладываю видео уроки по разработке сайтов и не только. Подписывайтесь, скоро будет серия свежих видео-инструкций:
Перейти на канал
Заметки разработчика

Примерно с 2013-го года пишу, короткие и не очень, заметки по разработке сайтов на Битрикс. Возможно, будут полезны кому-то еще. Во всех заметках есть возможность комментирования и обсуждения. Вы можете задавать уточняющие вопросы прямо там- отвечаю или дополняю заметки по возможности.

Заказaть разработку attention