Меню

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

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

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

Блог-note: заметки разработчика

Создание PWA для сайта на 1С-Битрикс

Технология PWA позволяет создать приложение для любого сайта. Не обязательно работающего на 1С-Битрикс, данная заметка ...

Привязка к разделам в компоненте "Добавления элементов пользователем"

В системе управления 1С Битрикс есть компонент "Форма добавления / редактирования" - который позволяет пользователям доб...

Помечаем новинки лейблом в каталоге битрикс

Достаточно часто, при разработке каталога товаров или интернет магазина на системе управления Битрикс, встает задача как...

Добавить свойство в административную форму заказа

Задача, кастомизировать административную форму заказа: добавить свойство заказа в шапку формы, в виде картинки. На сайте...

Заполнение множественного пользовательского свойства типа "строка" через API

Задача: когда пользователь заходит в мобильное приложение, нужно сохранить FCM токен устройства в пользовательское поле ...

Ленивая подгрузка картинок в компоненте, на vue js Битрикс

Если на одну страницу сайта выводится большое количество картинок, которые могут долго подгружаться- либо нужно попасть ...

Очистка корзины в 1С-Битрикс одним нажатием

В стандартной корзине Битрикс не хватает кнопки для полной очистки корзины одним нажатием. Требуется это довольно редко,...

Ссылка и название раздела в списке новостей Битрикс

Если нужно вывести название раздела инфоблока в котором находится конкретный элемент/новость в компоненте "списк новосте...

Отфильтровать товары бренда и вывести по разделам каталога

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