Показ страницы сайта в боковом слайдере

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

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

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

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

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

Самый простой способ: добавить в шаблон сайта проверку: не открыта ли страница в боковой панели (по факту, в IFRAM-е). Добавляем вот такой код в header.php (до начала верстки шапки):

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

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

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

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

Работаем с методом 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- но для страниц с не большим количеством контента.
  • width: ширина панели, если помещается
  • cacheable: true или false. Если true то панель не «умирает» после закрытия и вызывается сразу. Но с тем же контентом.
  • mobileFriendly: если не помещается по ширине то сжимается так, что бы поместиться.
  • allowChangeHistory: true или false. Если true то панель меняет адрес страницы.
  • allowChangeTitle: true или false. Если true то панель меняет заголовок страницы.
  • loader: можно указать url на svg файл со своим спиннером (показывается во время подгузки панели)
  • label: управление кнопкой/этикеткой закрытия: название, цвет, прозрачность. Можно не указывать, будет синий с крестиком.
  • animationDuration: скорость выезда панели в миллисекундах