Три способа
Способ 1.
Самый универсальный способ по-битриксовски. Очень удобен, когда одну и ту же подстановку надо делать на разных страницах.
Обработка события OnEndBufferContent. Парсим код всей страницы.
В файле init.php:
AddEventHandler("main", "OnEndBufferContent", "ChangeMyContent");
function ChangeMyContent($content)
{
// только если на странице есть нужный шаблон куда подставлять
if (strpos( $content, '<ШАБЛОН>')!== false ) {
ob_start();
// здесь вызываются компоненты которые надо подставить.
$out1 = trim(ob_get_contents());
ob_end_clean();
$out1 = str_replace('<ШАБЛОН>', $out1, $content);
}
}
Замечание. <ШАБЛОН> лучше всего писать со спецсимволами <>.
Начинающие хакеры не испортят вид вашей страницы, написав что-то в отзыве о товаре.
Cпособ 2.1.
Примерно тоже самое, но пишем в коде страницы, на которой лежат компоненты:
ob_start();
// код компонента, куда вставляем.
$out1 = trim(ob_get_contents());
ob_end_clean();
if (strlen($out1)>0) {
if ( strpos( $out1, '<ШАБЛОН>')!== false ) {
ob_start();
// код, что вставляем.
$out2 = trim(ob_get_contents());
ob_end_clean();
echo str_replace('<ШАБЛОН>', $out2, $out1);
} else {
echo $out1;
}
}
Способ 2.2.
Чуть хитрее. Применяется, когда во вставляемом компоненте включен аякс.
Мы не вставляем один компонент в другой. А наоборот. Первый компонент режем и половинки вставляем вокруг второго.
ob_start();
// код компонента, куда вставляем.
$out1 = trim(ob_get_contents());
ob_end_clean();
if (strlen($out1)>0) {
if ( strpos( $out1, '<ШАБЛОН>')!== false ) {
$parts = explode('<ШАБЛОН>', $out1);
echo $parts[0];
// код, что вставляем.
echo $parts[1];
} else {
echo $out1;
}
}
Способ 3.
Самый любимый. В одну строчку.
А зачем парсить на сервере и тратить дорогие ресурсы? Пусть у пользователя JavaScript сам подставляет.
Оказалось, что такая реализация самая универсальная и совсем не сложная.
<!--Скрытый див, где-то на странице.-->
<div style="display: none;" id="from">Наш html, который надо подставить</div>
...
<!--пустой див в закэшированном компонете-->
<div style="display: block;" id="to"></div>
<script type="text/JavaScript">
<!--Вот эта строчка-->
document.getElementById('to').innerHTML = document.getElementById('from').innerHTML;
</script>
Мы всегда можем найти нужный узел по id и вставить в него тот HTML который нам нравится.
Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Нет комментариев