@jazzman7

Как создать несколько шорткодов в битриксе?

Здравствуйте! Стоит задача, сделать так сказать несколько шорткодов в битриксе, которые в тексте будут менять текст на php код, нашел инструкцию, создал один шорткод, все ок, создаю второй, у меня страница загружается (дублируется) два раза в которой сначала первый шорткод работает, потом второй, как заставить работать оба? что делаю

result_modifier.php такого содержания:

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?$this->__component->SetResultCacheKeys(array("CACHED_TPL"));?>
<?$this->__component->SetResultCacheKeys(array("CACHED_TPL2"));?>


component_epilog.php такого:
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?
echo preg_replace_callback(
         "/#VOTE_ID_([\d]+)#/is".BX_UTF_PCRE_MODIFIER,
        function ($matches) {
           ob_start();
           /*component here*/
           $retrunStr = @ob_get_contents();
           ob_get_clean();
           return $retrunStr;
        },
        $arResult["CACHED_TPL"]);

echo preg_replace_callback2(
         "/#VOTE_ID_TWO_([\d]+)#/is".BX_UTF_PCRE_MODIFIER,
        function ($matches2) {
           ob_start();
           /*component 2 here*/
           $retrunStr2 = @ob_get_contents();
           ob_get_clean();
           return $retrunStr2;
        },
        $arResult["CACHED_TPL2"]);
?>


template.php в самом конце:
<?
$this->__component->arResult["CACHED_TPL"] = @ob_get_contents();
$this->__component->arResult["CACHED_TPL2"] = @ob_get_contents();
ob_get_clean();
?>
  • Вопрос задан
  • 273 просмотра
Решения вопроса 1
Советую Вам нанять 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;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы