Как сделать чтобы хлебные крошки битрикс не выводились в браузер а попадали в переменную?

Ситуация следующая. На одной из страниц сайта из за необычного дизайна требуется чтобы хлебные крошки выводились в середине шаблона news:list
Я понимаю что такой вариант кому то захотелось бы обсудить на правильность такой верстки, но суть такая что есть ТЗ и верстка должна быть именно такой.
В new листе цикл по $arResult используется аш 3 раза, поскольку выводит информацию из элемента инфоблока в разные div блоки не вложенные друг в друга. Пара таких блоков разделена в том числе вызовом хлебных крошек.
Если просто вставить вызов компонента хлебных крошек в шаблон newl:list замечено что часть шаблона news-листа которая находится выше хлебных крошек вырезается из html что приводит к краху страницу и разумеется так оставлять нельзя.
Понимаю что можно сделать 2 шаблона new:list и вызвать сначала один затем хлебные крошки затем другой news лист по тому же самому инфоблоку и так бы всё работало нормально, но тогда количество выводимых элементов и прочие настройки нужно в каждом настаивать или писать переменные общие - это не самый лучший вариант. К тому же хочется понять как сделать через 1 news:list.
Пробовал запустить буферизацию в result_modifier.php а затем подставить хлебные крошки в component_epilog.php в нужно место, но оказывается как только подключаются хлебные крошки, они выключают буферизацию и не получается обработать часть html где они содержатся.
Отложенными функциями так же не вижу возможности решить, так как место для вставки находится внутри шаблона new-лист, а не в header.
Из предположительных решений, предполагаю как то можно переписать component так что он будет возвращать результат отработанного компонента хлебных крошек не в браузер а в виде переменной, о таком способе я как то читал, но до текущего момента не пробовал так делать.
Думаю что достаточно описал ситуацию, есть какое то стандартное решение?(разумеется кроме варианта - исправить вёрстку, чтобы хлебные крошки были в хеадере).
  • Вопрос задан
  • 2216 просмотров
Пригласить эксперта
Ответы на вопрос 4
@ivashjke
Vue JS, React, React Native
ob_start();
подключение компонента с хлебными крошками
$APPLICATION->SetPageProperty("breadcrumbs", ob_get_clean());
потом вывод где нужно $APPLICATION->ShowProperty('breadcrumbs');

либо подключить их в header
ob_start();
подключение компонента с хлебными крошками
$breadcrumbs = ob_get_clean();
потом выводить, если так уж через переменную хочется
Ответ написан
У bitrix есть обертка над потоками вывода.
<?$this->SetViewTarget('news_detail');?>
   <noindex><a rel="nofollow" class="h1-head fancy" href="/develop/change_cover_type.php"><?=$arDataFilter["NAME"]?></a></noindex>
<?$this->EndViewTarget();?> 
//Вывести где нужно
<?$APPLICATION->ShowViewContent('news_detail');?>
Ответ написан
@kudis
Bitrix developer
Есть 2 варианта:
1. Вывод данных из news.list в его component_epilog, в котором вы вызовете, кроме всего прочего, ещё и компонент хлебных крошек, который отлично отработает
2. Вывод данных из news_list на страницу кусками через ShowViewContent
$APPLICATION->ShowViewContent('news_part_1');
// что нибудь
$APPLICATION->ShowViewContent('news_part_2');
// компонент крошек
$APPLICATION->ShowViewContent('news_part_3');

А самим крошкам в хэдере запретить показываться по какому-нибудь свойству страницы
Ответ написан
Комментировать
Думаю что достаточно описал ситуацию, есть какое то стандартное решение?(разумеется кроме варианта - исправить вёрстку, чтобы хлебные крошки были в хеадере).

Нет и быть не может - сам компонент хлебных крошек это по сути такая же отложенная функция.
Идея получить в переменнух х.к. внутри компонента сама по себе не очень - потому что они могут изменится даже в футере.
Получается что вы хотите получить переменную до ее установки.
Кина не будет.

Правильное решение - делать правильную верстку которая не будет разрывать ваш шаблон news.list или делать два news.list на странице, а между ними хлебные крошки.

Неправильное решение - использовать в шаблоне news.list GetNavChain - так получите цепочку сформированную к моменту вывода шаблона и делайте что хотите с ней. В принципе это будет работать, но не удивляйтесь если что...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы