Модификация хлебных крошек (навигационная цепочка, breadcrumb) в Битрикс

Компонент для вывода навигационной цепочки («хлебных крошек», breadcrumb) в Битрикс не всегда подходит под наши нужды или дизайн.Например, если на странице поставить комплексный компонент новости и указать в настройках, чтобы название инфоблока включалось в цепочку навигации, компонент breadcrumb выдаст нам на страницах списка новостей и  новости детальной цепочку: «Главная / Новости», где пункт «новости» будет ссылкой.

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

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

if($arResult[$index]["LINK"] <> "")

дописать условие для последнего пункта навигационной цепочки

if($arResult[$index]["LINK"] <> "" && $index != ($itemSize - 1))

Далее нам нужно добавить пункт в конец навигационной цепочки на странице детальной новости с названием новости. Это нужно делать в шаблоне комплексного компонента новости в файле detail.php после вызова компонента news.detail. Нельзя добавлять пункт в хлебные крошки в самом шаблоне детальной новости, т.к. шаблон кешируется, более того, нельзя этого делать и в файле component_epilog.php, т.к. пункт добавится в начало breadcrumb. Но component_epilog создать все равно необходимо, чтобы передать в файл detail.php название новости. Для этого в компонент эпилог добавим

global $elemName;
$elemName = $arResult['NAME'];

В detail.php также объявим глобальную переменную и добавим пункт в навигационную цепочку

global $elemName;
$APPLICATION->AddChainItem($elemName);

По тому же принципу breadcrumb делается и в комплексном компоненте каталога.

Похожие статьи

Статья оказалась полезной? Вырази благодарность - поделись в соцсетях

Отзывы : 2 комментария

  1. А можно делать премодерацию изменений данных пользователя? Т.е. чтобы данные, который пользователь изменил у себя в профиле, вступали в силу только после разрешения админа?

    • Я думаю можно создать в базе в таблице пользователей b_user столбец или использовать не нужный существующий для флага-отметки необходимости модерации. Потом повесить на событие изменения пользователя OnAfterUserUpdate обновление этого поля. И при авторизации пользователя выполнять проверку, если отметка есть — выводить сообщение о том, что изменения ждут одобрения админом.

Комментирование отключено