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

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

Собственно все элементарно: в шаблон 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;?>  

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

Все заметки
Уважаемый читатель! В связи с участившимся спамом в комментариях, возможность писать доступна только для зарегистрированных пользователей

Зарегистрироваться Войти
Напомнить пароль

Быстрая регистрация через соц.сеть:
Гость сайта
Можно ли сделать так, чтобы в ссылку выводился не 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/
Случайные заметки из блога
Изменить размер картинок на лету в битрикс

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

Фиксированная корзина с обновлением, без перезагрузки страницы.

Иногда нужно сделать так, чтобы корзина в интернет магазине,...

Простой WEB сервер на ubuntu, для Битрикс

Расскажу как по быстрому сконфигурировать WEB сервер для работы...

Вывести минимальную цену торговых предложений в Битрикс

Если у товара несколько торговых предложений и у каждого предложения...

Отсортировать элементы в Битрикс по свойству привязка к разделам

При создании достаточно сложных интернет-магазинов на Битрикс,...

Малая корзина Битрикс, упрощенный шаблон

Шаблон малой корзины битрикс, который можно вывести в боковом...

Свежие комментарии в блоге
Вывести новости из конкретного раздела инфоблока Битрикс

[CODE] Выводить новости определенного раздела, но компонентом bitrix:news так. В компоненте bitri...

23.06.2017 / Кирилл
Пункты меню из разделов инфоблока Битрикс

Михаил спасибо за ваши уроки, все понятно и доступно. Подскажите пожалуйста (а лучше приведите приме...

20.06.2017 / Константин Логинов
Время на БД и веб сервере отличается на 3600 секунд, тест Битрикс

[url=/blog-note/2040/]Время на БД и веб сервере отличается на 3600 секунд, тест Битрикс[/url] До...

19.06.2017 / Михаил Базаров
Две готовые виртуальные машины для веб-разработки

Добрый день! Не работают ссылки на архивы облака mail.ru. Вы можете перезалить архивы?

12.06.2017 / Илья Белявцев

© 2011—2017 Частный вебмастер: ИП Базаров, ОГРНИП: 315784700173692. Работает на 1С-Битрикс.

Копирование материалов запрещено: "ГК РФ, часть 4, раздел VII: Права на результаты интеллектуальной деятельности".

Информация размещенная на сайте, не является публичной офертой. Политика конфеденциальности

x
Как к Вам обращаться? *
Ваша электронная почта: *
Доп. материалы (логотип, тех. задание):
 
Обзор
Текст сообщения:

Нажимая на кнопку "Отправить", Вы соглашаетесь на обработку Ваших персональных данных согласно политике конфеденциальности. Ознакомиться с которой, можно в нижнем правом углу сайта