Когда-то давно читал у Антона Долганина Компонент в теле новости, а недавно мне нужно было реализовать подобную задачу но с поддержкой AJAX. Если делать так как написал Антон, то опрос (с аяксом) подключается выше тела новости, а он вполне может быть и в самой новости и после нее.
В моем случае разница только в файле component_epilog.php
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?
global $idVote;
echo preg_replace_callback(
"/#VOTE_ID_([\d]+)#/is".BX_UTF_PCRE_MODIFIER,
create_function('$matches', 'ob_start();
echo("<div id=vote_news_$matches[1]></div>");
global $idVote;
$idVote=$matches[1];
$retrunStr = @ob_get_contents();
ob_get_clean();
return $retrunStr;'),
$arResult["CACHED_TPL"]);
?>
<? if($idVote):?>
<? //делаем блок невидимым на всякий случай, если опрос внутри новости, иначе прыгнет снизу в необходимое место?>
<div id="city_vote" style="display:none;">
<?$APPLICATION->IncludeComponent(
"bitrix:voting.current",
"voting_current_ajax",
Array(
"CHANNEL_SID" => "INTERVIEW",
"VOTE_ID" => $idVote,
"VOTE_ALL_RESULTS" => "N",
"CACHE_TYPE" => "A",
"CACHE_TIME" => "3600",
"CACHE_NOTES" => "",
"AJAX_MODE" => "Y",
"AJAX_OPTION_JUMP" => "N",
"AJAX_OPTION_STYLE" => "Y",
"AJAX_OPTION_HISTORY" => "N",
"AJAX_OPTION_ADDITIONAL" => ""
),$component
);?>
</div>
<script type="text/javascript">
$(document).ready(function(){
//сначала клонируем опрос вместе с событиями, потом вставляем в нужное место, иначе не переносятся его события
$("#city_vote div:first").clone(true).appendTo("#vote_news_<?=$idVote?>");
//потом очищаем контейнер
$("#city_vote").empty();
});
</script>
<?endif?>
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».