Телеграм: @camouf_ru Почта: mihail@bazarow.ru

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

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

Если вы хотите сделать подгрузку любой страницы сайта в боковой слайдер, для этого в битриксе есть метод 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 будет создаваться только в боковой панели, а мы не добавляем не нужные участки верстки если эта переменная существует.

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

В принципе да. Использовать ID товара в качестве связки с детальной карточкой.
Гость 26.05.2022
В документации Битрикс написано:
"Слайдер выезжает справа налево, занимая все пространство сверху донизу".
Так только, без вариантов? Например по центру всплывать никак?
Михаил Базаров 28.05.2022
Цитата
Гость написал:
В документации Битрикс написано:
"Слайдер выезжает справа налево, занимая все пространство сверху донизу".
Так только, без вариантов? Например по центру всплывать никак?

Не ковырял его в эту сторону. Но, если потратить время думаю можно унаследоваться от этого модуля и кастомизировать css ки
Гость 27.11.2022
Пробовал подключить, но на редакции Старт не работает.

В header: <?
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true)
{
   die();
}
CJSCore::Init("sidepanel");
?>
Шапку и подвал обернул.
В подвале в самом низу скрипт  : <script>$('.show_panel').click(function () {

   BX.SidePanel.Instance.open("/test2/", {
       requestMethod: "post",
       width: 500,
       cacheable: true,
       mobileFriendly: true,
       allowChangeHistory: false,
       label: {
           text: "Закрыть панель",
           color: "#FFFFFF",
           bgColor: "#E2AE00",
           opacity: 80
       },
   });

});
</script>
На тестовой странице вывел кнопку: <button class="show_panel">Показать панель</button>

Жму на кнопку и ничего не присходит. Может из-за редакции Старт не работает?
Михаил Базаров 27.11.2022
Да, наверное в этой редакции нет этого расширения. Не знаю с какой появляется.

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Объединить отдельные поля ФИО в одно свойство при оформлении заказа. Просмотров: 855 Пользователь, при оформлении заказа, заполняет три отдельных поля с фамилией, именем и отч... Отфильтровать товары бренда и вывести по разделам каталога Просмотров: 629 Задача: на странице бренда, который выводится компонентом новостей, нужно показать все тов... Заполнить поля пользователя из свойства заказа, на примере ФИО Просмотров: 1170 При создании заказа покупатель заполняет поле "ФИО". Необходимо скопировать эти данные в п... Получить все товары из всех заказов пользователя. История купленных т... Просмотров: 1345 Задача: нужно создать раздел, в персональном разделе пользователя, с историей всех купленн... Старые шаблоны битрикс для простой верстки Просмотров: 16888 Новые версии типового интернет-магазина, который идет в комплекте с Битрикс (от 12 версии ... Бонус за выполненный заказ на внутренний счет пользователя Просмотров: 4233 Задача: после того как заказ, в интернет-магазине, перешел в статус "Выполнен" начислить п... Правильное подключение стилей и скриптов в Битрикс Просмотров: 80470 Есть несколько способов подключения файлов стилей и скриптов, при верстке шаблонов в систе... Модифицировать состав заказа #ORDER_LIST# в почтовом событии "Новый з... Просмотров: 28402 Если вы хотите как-то по особенному сверстать состав заказа в почтовом уведомлении 1С-Битр... Перенос Битрикс сайта с хостинга на хостинг, инструкция Просмотров: 25983 Достаточно часто спрашивают как перенести сайт работающий на 1С Битрикс с одного хостинга ... Вывести информацию, только на первом уровне раздела каталога, в 1С-Би... Просмотров: 4216 Задача: на сайте, в каталоге, выводится два фильтра - боковой и верхний. Оба компонента по... Создание PWA для сайта на 1С-Битрикс Просмотров: 2052 Технология PWA позволяет создать приложение для любого сайта. Не обязательно работающего ... Отключить поиск по описаниям товаров в Битрикс Просмотров: 10581 Иногда, нужно отключить поиск по описаниям анонсов и детальному описанию товаров, при разр... Информация о заказах и содержимое корзины текущего пользователя. Просмотров: 11731 В процессе разработки сайта могут понадобиться рецепты приведенные ниже. Использовать можн... INPUT type="file" Предпросмотр превью картинки до загрузки Просмотров: 11188 Рассмотрим на примере компонента "Форма добавления-редактирования элементов инфоблока", ка... Заполнение габаритов товара, после обмена с 1С, из свойств элемента и... Просмотров: 10383 Если Ваш интернет-магазин интегрирован с 1С, скорее всего столкнулись с такой проблемой: 1... Автогенерация символьных кодов разделов и элементов Битрикс Просмотров: 14950 Иногда нужно создать символьные коды для разделов и элементов. Например: если сайт создан ... Использование WebP изображений в 1С-Битрикс (на Битрикс: Веб окружени... Просмотров: 25832 WebP это современный формат сжатия изображений, который позволяет, при правильных настройк... Вывести артикул в печатную форму бланка заказа Просмотров: 350 Задача: в печатную форму бланка заказа добавить артикулы товаров и данные о пользователе. ... Сортировка элементов по индексу сортировки значений типа список Просмотров: 10497 Внутри любого компонента есть заранее заложенные поля для сортировки элементов. МОжно сорт... Постраничная навигация в списке разделов Битрикс- catalog.section.lis... Просмотров: 8660 Если в магазине очень много разделов и хочется вывести их с постраничной навигацией: можно...