@Malkolm163

Как в Bitrix вывести компонент в переменную?

Есть некое приложение, которое через ajax общается с бекэндом (приложение отправляет запрос, в ответ получает json и с ним работает).
Мне, предположим, надо получить одним запросом список товаров той или иной категории и хлебные крошки (может быть еще какие-то данные).
И в битрикс есть компоненты, которые уже получают нужные мне данные (bitrix:breadcrumb, bitrix:catalog.section - остается только добавить новый шаблон, который вместо генерации html упакует нужные данные в json),
но если я в коде обработчика буду вызывать эти компоненты, то результат работа компонента я получу в виде вывода в браузер (echo), а не в переменную, что по сути не дает мне возможности работать с теми данными, которые компонент выдал - они уже в потоке вывода (что кстати помимо прочего ломает json ответа).
Думал сделать через буферизацию, но получается ерунда какая-то
вот некий метод, который получать должен результат работы компонента
private function component($name, $params) {
    global $APPLICATION;
    ob_start();
    $APPLICATION->IncludeComponent(
      "bitrix:breadcrumb",
      "json",
      Array(
        "PATH" => "/catalog/zhenskaya-odezhda",
        "SITE_ID" => "s1",
        "START_FROM" => "0",
      ),
      false,
      ["HIDE_ICONS"=>"Y"]
    );
    $d = ob_get_clean();
    var_dump([
      'd' => $d
    ]);
  }

но в результате вывода
[{"TITLE":"\u041a\u0430\u0442\u0430\u043b\u043e\u0433","LINK":"\/catalog\/"}]array(1) {
  ["d"]=>
  string(0) ""
}
{"code":0,"data":{}}

т.е компонент отрендерился буферизация по боку...
Просто, думаю это глупо писать код для каких-то вещей, если он уже написан, а ядро ковырять тем более не правильно, чтобы напрямую сделать возврат из компонента вместо вывода
  • Вопрос задан
  • 1497 просмотров
Пригласить эксперта
Ответы на вопрос 1
babarun
@babarun Куратор тега 1С-Битрикс
Безумный план моих идей в руках больных людей
Потому что внутри компонента bitrix:breadcrumb используется отложенная функция $APPLICATION->AddBufferContent
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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