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

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

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

В 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/
 
Здравствуйте, Михаил!

Использую в своем проекте "Более феншуйный и правильный вариант".
Но почему-то под каждой новость выводиться толька одна ссылка (либо на предыдущую, либо на следующую), но никак не обе сразу.
 
Как к первому варианту прикрутить изображение с ресайзом и заголовок новости?
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 
Поблагодарить и поддержать:
Или подписаться на boosty канал: Видео на Ютубе