Есть некое приложение, которое через 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":{}}
т.е компонент отрендерился буферизация по боку...
Просто, думаю это глупо писать код для каких-то вещей, если он уже написан, а ядро ковырять тем более не правильно, чтобы напрямую сделать возврат из компонента вместо вывода