Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Компонент в теле новости
Иногда стоит задача в теле новости вывести какой-то компонент. Например, опрос. И рассмотрим на примере его вывода.
1. Обозначим маркер для замены на текущий опрос. Пусть этот маркер будет #VOTE_ID_XX#, где XX это ID нужного нам опроса.
2. Настроим компонент (в нашем случае это bitrix:voting.current) на отдельной странице так как нам удобно. Отключим работу в AJAX-режиме.
3. Копируем шаблон новости в свой шаблон для редактирования. Открываем шаблон детального просмотра и создаем два файла: result_modifier.php и component_epilog.php
Обратите внимание, что вместо обычного $APPLICATION написано $GLOBALS["APPLICATION"]. Так надо для видимости объекта внутри временной функции. В остальном это полностью код того компонента, который мы взяли из тела страницы в п.2.
И обратите внимание на $matches[1]. Это единственный динамический параметр в вызываемом компоненте. Динамический в том плане, что он будет зависеть от того какой маркер мы меняем. Для #VOTE_ID_1# он будет равен 1, для #VOTE_ID_1# 2 и так далее.
5. Теперь надо изменить template.php. На второй строчке впишите конструкцию:
если внутренним компонентом использовать компонент типа catalog.smart.filter, при ajax-запросе внутри компонента вывод будет неожиданным из-за использования $APPLICATION->RestartBuffer(); внутри выходного ajax.php. Причина в том, что $APPLICATION->RestartBuffer(); очищает только первый уровень буфера, а в Вашем примере некешируемый компонент находится внутри второго уровня буфера. Предложенное решение внести "while (ob_get_level()) ob_end_clean();" в рестарт буфера ТП не поддержали, просто ответив, что вложенная буферизация не поддерживается стандартными методами.