Показ страницы сайта в боковом слайдере, на примере всплывающей формы обратной связи.

Просмотров: 11442

Если вы хотите сделать подгрузку любой страницы сайта в боковой слайдер, для этого в битриксе есть метод BX.SidePanel.Instance.open. Метод открывает в слайдере страницу с указанным адресом в параметре url. Возвращает true, если слайдер успешно открылся, иначе false.

Как этим воспользоваться? Покажу на примере: мне на сайте (на этом сайте, на котором вы находитесь) нужно было сделать боковую панель с формой обратной связи, которая должна открываться при клике по кнопке или ссылке. При этом, эта же форма доступна на отдельной странице сайта.
Пример использования:

Чтобы не плодить одинаковую форму и просто вызывать ее при клике на кнопке, пригодится метод BX.SidePanel.Instance.open.

У заметки есть аналог: Показ контента любой страницы сайта во всплывающем окне

Настройка шаблона сайта для боковой панели

Итак: если мы просто воспользуемся этим методом, в нашу боковую панель будет подгружена страница целиком — вместе с шапкой и футером сайта. А нам нужно показывать только контент страницы, исключая ненужные части.

Самый простой способ — добавить в шаблон сайта проверку: не открыта ли страница в боковой панели (по сути, в iframe). Для этого вставьте следующий код в header.php (до начала верстки шапки):

if (isset($_REQUEST["IFRAME"]) && $_REQUEST["IFRAME"] === "Y") {
    $isInFrame = true;
}

Затем оберните верстку шапки и футера (и всё, что не нужно показывать в боковой панели) в условие:

<?php if (!isset($isInFrame)) { ?>
    ...
    Верстка шапки
    ...
<?php } ?>
    WORKAREA
<?php if (!isset($isInFrame)) { ?>
    ...
    Верстка футера
    ...
<?php } ?>

Таким образом, переменная $isInFrame будет создаваться только при открытии в боковой панели, и мы не будем добавлять ненужные участки верстки, если эта переменная установлена.

PS: Есть ещё один способ реализовать подобный функционал без внесения изменений в шаблон сайта. Он требует создания собственного компонента и вывода его на соответствующих страницах, что кажется избыточным, если таких страниц много. Об этом расскажу позже, в следующих заметках.

Работа с методом BX.SidePanel.Instance.open

Теперь выведем боковую панель, которая будет открываться по клику на кнопку. Для этого создадим кнопку в нужном месте:

<button class="show_panel">Показать панель</button>

Подключите сценарии боковой панели в header.php:

CJSCore::init("sidepanel");

Затем добавьте скрипт, который при клике по кнопке откроет боковую панель и подгрузит в нее нужную страницу сайта:

$('.show_panel').click(function () {
    BX.SidePanel.Instance.open("/ССЫЛКА_НА_СТРАНИЦУ_ДЛЯ_ПАНЕЛИ/", {
        requestMethod: "post",
        width: 500,
        cacheable: true,
        mobileFriendly: true,
        allowChangeHistory: false,
        label: {
            text: "Закрыть панель",
            color: "#FFFFFF",
            bgColor: "#E2AE00",
            opacity: 80
        },
    });
});

На этом всё: панель заработает с заданными настройками. Ниже приведены некоторые параметры её кастомизации:

  • requestMethod: метод передачи данных (например, GET или POST). Чтобы страницы не занимали много места, советую использовать POST.
  • width: ширина панели, если она помещается на экране.
  • cacheable: true или false. Если true, панель не исчезает после закрытия и вызовается заново с тем же контентом.
  • mobileFriendly: если контент не помещается по ширине, сжимается так, чтобы полностью поместиться.
  • allowChangeHistory: true или false. Если true, панель меняет URL-адрес страницы в адресной строке.
  • allowChangeTitle: true или false. Если true, меняется заголовок панели.
  • loader: можно указать URL на SVG-спиннер (показывается во время загрузки).
  • label: управление кнопкой или окном закрытия: название, цвет, прозрачность. По умолчанию — синий с крестиком.
  • animationDuration: скорость анимации появления панели в миллисекундах.

Вызов боковой панели с помощью wrapper-компонента

Можно избежать внесения изменений в шаблон сайта, используя компонент-обертку.

Для этого на странице, которую планируем открыть в боковой панели, добавьте следующий вызов компонента:

$APPLICATION->IncludeComponent(
    'bitrix:ui.sidepanel.wrapper',
    '',
    [
        'POPUP_COMPONENT_NAME' => 'bitrix:имя_компонента_обратной_связи',
        'POPUP_COMPONENT_TEMPLATE_NAME' => 'шаблон_компонента',
        'POPUP_COMPONENT_PARAMS' => [
            // Передавайте параметры компонента (например, формы обратной связи)
            ...
        ],
        // 'NOTIFICATION' => 'Успешно сохранено!', (по желанию)
    ]
);

Смысл в том, что при вызове страницы через этот компонент в iframe внутри боковой панели отображается только указанный компонент, а остальная часть сайта — скрыта.

Стоимость разработки на 1С-Битрикс:

Индивидуальная разработка магазина

от 500 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Запуск сайта на готовом решении

от 150 000 руб. от 7-ми дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Мобильное приложение

от 550 000 руб. от 5-ти недель

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Сайт компании

от 300 000 руб. от 2-х недель

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Инфоресурс

от 300 000 руб. от 4-х недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

3D‑моделирование, визуализация

от 25 000 руб. от 3-х дней

По вашим фото, чертежам или описанию создадим 3D‑модели и отрендерим набор изображений для каталога товаров: общий вид, крупные планы и технические ракурсы или 360°‑обзор товара.