Советую Вам нанять PHP-разработчика для подобных задач и не мучаться. Из показазанного кода очевидно, что Вы совершенно не понимаете, что он делает.
Для иллюстрации покажу решение, которое должно работать. ("Должно" - потому что я не стал собирать тестовый стенд). Привожу с минимальными отличиями от Вашего кода ( некоторые конструкции мне не нравятся по стилю).
result_modifier.php:
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?$this->__component->SetResultCacheKeys(array("CACHED_TPL"));?>
template.php в самом конце:
<?
$this->__component->arResult["CACHED_TPL"] = @ob_get_contents();
ob_get_clean();
?>
component_epilog.php:
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?
$content = $arResult["CACHED_TPL"];
$content = preg_replace_callback(
"/#VOTE_ID_([\d]+)#/is".BX_UTF_PCRE_MODIFIER,
function ($matches) {
ob_start();
/*component 1 here*/
$returnStr = @ob_get_contents();
ob_get_clean();
return $returnStr;
},
$content);
$content = preg_replace_callback2(
"/#VOTE_ID_TWO_([\d]+)#/is".BX_UTF_PCRE_MODIFIER,
function ($matches2) {
ob_start();
/*component 2 here*/
$returnStr = @ob_get_contents();
ob_get_clean();
return $returnStr;
},
$content);
echo $content;