Задать вопрос

Как вывести баннер товара в шапку сайта?

Задача: вывести баннер товара/раздела/инфоблока в шапку сайта и в зависимости есть ли баннер или нет выводить разны крошки и разный заголовок

В шаблоне списка новостей я делаю проверку на наличие баннера и далее получаю картинку если она есть (в дальнейшем проверку буду пополнять искать в товарах или свойствах раздела, но на данном этапе просто поиск картинки в инфоблоке)
<?php
$picture = '';
if (!empty($arResult['PICTURE'])) {
    $picture = $arResult['PICTURE'];
}
?>

<?php if (!empty($picture)): ?>
    <div class="container-fluid history" style="background-image: url('<?= CFile::GetPath($picture); ?>');">
        <div class="container">
            <?php $APPLICATION->IncludeComponent(
                "bitrix:breadcrumb",
                "breadcrumb-light",
                array(
                    "COMPONENT_TEMPLATE" => "breadcrumb-light",
                    "PATH" => "",
                    "SITE_ID" => "s1",
                    "START_FROM" => "1"
                )
            ); ?>
            <h1 class="h1-title"><?php $APPLICATION->ShowTitle() ?></h1>
        </div>
    </div>
<?php else: ?>
    <div class="container">
        <?php $APPLICATION->IncludeComponent(
            "bitrix:breadcrumb",
            "breadcrumb",
            array(
                "COMPONENT_TEMPLATE" => "breadcrumb",
                "PATH" => "",
                "SITE_ID" => "s1",
                "START_FROM" => "1"
            )
        ); ?>
        <h2 class="h2-title"><?php $APPLICATION->ShowTitle() ?></h2>
    </div>
<?php endif; ?>


пытался использвать
<?php $this->SetViewTarget('top-banner'); ?>
...мой код...
<?php $this->EndViewTarget(); ?>


Но компоненты (крошки и заголовок) которые находятся внутри некорректно отрабатывают
К сожалению мне нужно как-то отловить наличие этого баннера и вывести либо светлые либо тёмные крошки также и заголовок либо высокий либо дефолтный

Может есть список как-то настроить вывод компонентов через буферную зону или как-то переписывать код чтобы не вызывать их там?
  • Вопрос задан
  • 101 просмотр
Подписаться 1 Сложный 2 комментария
Решения вопроса 1
Судя по $arResult, показанный код где-то в template.php шаблона компонента для вывода баннера. Не надо так.
вместо этого в шаблоне компонента делаете так:
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
$this->SetViewTarget("banner-head");
if (!empty($arResult['PICTURE'])){
    echo CFile::GetPath($arResult['PICTURE']);
}

(это весь код шаблона)
а в header.php сайта пишете:
<?$APPLICATION->IncludeComponent(/* вызов компонента для баннера */);?>
<?php
$picture = trim($APPLICATION->GetViewContent('banner-head'));
if (!empty($picture)): 
// и дальше как было
<?php

Должно получиться.

Пихать $APPLICATION->ShowTitle() внутрь шаблона компонента вообще дурная идея. С хлебными крошками, вероятно, то же самое, потому что это особенный компонент, и шаблон у него особенный.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы