Модальное окно в оформлении заказа sale.order.ajax Bitrix
- Содержание:
- 1. Почему нужно добавлять модальное окно в оформлении заказа sale.order.ajax на Битрикс?
- 2. Работы по созданию модального окна в оформлении заказа
Почему нужно добавлять модальное окно в оформлении заказа sale.order.ajax на Битрикс?
Выводить модальное окно в оформлении заказа sale.order.ajax в 1С-Битрикс можно по разным причинам.
Например на сайте есть объединение заказа и нужно вывести сообщение что будет происходить дальше, объединять заказ, или не объединять.
Также может быть другой случай, когда в шапке сайта имеется один выбранный город, а в самом оформлении заказа был заполнен другой город. И расчет доставки был сделан на основе города, выбранного в шапке. Для того, чтобы уведомить пользователя, необходимо вывести сообщение в модальном окне.
В текущем примере модально окно встроено в шаблон Аспро Макс, но можно его встроить и в обычный шаблон.
Работы по созданию модального окна в оформлении заказа
Добавим модальное окно, например в public/include/header_include/orderModal.php
Хранить данные можно в админке, тогда их можно будет изменить, и так правильнее. Для этого можно воспользоваться классом \Bitrix\Main\Config\Option::get и получать данные таким путем и выводить так:
<?= (!empty(\Bitrix\Main\Config\Option::get('e1.site.settings', 'E1_SS_MODAL_ORDER_TEXT', 'N'))) ? \Bitrix\Main\Config\Option::get('e1.site.settings', 'SS_MODAL_ORDER_TEXT', 'N'): 'Уважаемый посетитель, город доставки отличается от вашего города, и цена доставки разная. Пожалуйста смените город, чтобы оформить заказ' ?>
А можно сразу вывести нужный текст, если он не будет меняться.
public/include/header_include/orderModal.php
<div class="custom-popup"> <div class="custom-popup__container"> <div class="popup__content"> <div class="popup__content-header"> <div class="popup__content-inner"> <div class="popup__content-header-title">Уведомление</div> </div> <div class="close"> <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M1 1L14.9998 14.9998M14.9999 1L1.00006 14.9998" stroke="#555555" stroke-width="2" stroke-linecap="round"/> </svg> </div> </div> <div class="popup__content-main"> <div class="popup__content-inner"> <div class="opportunity-list"> Уважаемый посетитель, город доставки отличается от вашего города, и цена доставки разная. Пожалуйста смените город, чтобы оформить заказ </div> <div id="bx-popup-order-save-block-buttons" class="opportunity-btns"> <a href="#" class="btn btn-default opportunity-btn">Сменить город</a> <a href="#" class="btn opportunity-btn check">Оформить заказ</a> </div> </div> </div> </div> </div> </div>
В самом файле sale.order.ajax будут показаны только те строчки кода, которые нужно буде изменить.
public/local/templates/aspro_max_custom/components/bitrix/sale.order.ajax/v1/order_ajax.js
//строка 1364 //добавляем modal, popup //BX.bind(this.orderSaveBlockNode.querySelector('[data-save-button]'), 'click', BX.proxy(this.clickOrderSaveAction, this)); //при клике на кнопку сохраняем заказ let save_buttons = BX('bx-popup-order-save-block-buttons').querySelectorAll('a.check'); for (let i = 0; i < save_buttons.length; i++) { BX.bind(save_buttons[i], 'click', BX.proxy(this.clickOrderSaveAction, this)); } //строка 8397 //добавляем класс js-show-opportunity-popup для того, чтобы запускать модальное окно className: 'btn btn-default btn-lg btn-order-save js-show-opportunity-popup' //строка 8400, убираем событие //делаем мод окно, в которое выводим, если город в шапке отличается от города в заказе // events: { // click: BX.proxy(this.clickOrderSaveAction, this) // }
public/local/templates/ВАШ ШАБЛОН/components/bitrix/sale.order.ajax/v1/template.php
<?//добавляем класс у кнопки js-show-opportunity-popup ?> <a href="javascript:void(0)" style="margin: 10px 0" class="pull-right btn btn-default js-show-opportunity-popup btn-lg hidden-xs" data-save-button="true">
public/local/templates/ВАШ ШАБЛОН/js/main.js
//poput sale.order.ajax create let showOpportunityPopup = function(e) { e.preventDefault(); $(".custom-popup").fadeIn(300); $('body').addClass('body-fixed'); } $(document).ready(function() { $(".custom-popup .close").click(function() { $(".custom-popup").fadeOut(300); $('body').removeClass('body-fixed'); }); $(".custom-popup .btn.btn-default.opportunity-btn").click(function() { $(".custom-popup").fadeOut(300); $('body').removeClass('body-fixed'); $('.regions-confirm-button-negative').click(); //вызываем выбор города }); }); //строка 8744 $(document).on('click', '.js-show-opportunity-popup', function(e) { if(BX.Sale.OrderAjaxComponent.isValidPropertiesBlock().length) { //Если форма НЕвалидна, прокручиваем к ошибке BX.Sale.OrderAjaxComponent.animateScrollTo($('.has-error')[0], 800, 50); } else { // Если форма валидна //проверяем город в форме и город в шапке, и выводим попап let region_wrapper = $('.region_wrapper .js_city_chooser span').html(); let $city = jQuery('input[data-id="city"]').val(); if (region_wrapper !== $city) { showOpportunityPopup(e); } } }) //строка 8774 let region_wrapper = $('.region_wrapper .js_city_chooser span').html(); let $city = jQuery('input[data-id="city"]').val(); //если форма валидна, то открываем мод окно или создаем заказ sale.order.ajax if(typeof BX.Sale.OrderAjaxComponent.allowOrderSave == 'function') { if (region_wrapper !== $city) { showOpportunityPopup(event); } else BX.Sale.OrderAjaxComponent.allowOrderSave(); } if(typeof BX.Sale.OrderAjaxComponent.doSaveAction == 'function') { if (region_wrapper !== $city) { showOpportunityPopup(event); } else BX.Sale.OrderAjaxComponent.doSaveAction();
public/local/templates/ВАШ ШАБЛОН/header.php
<?include_once(str_replace('//', '/', $_SERVER['DOCUMENT_ROOT'].'/'.SITE_DIR.'include/header_include/orderModal.php'));?>
public/local/templates/ВАШ ШАБЛОН/styles.css
/*стили модального окна, если города разные в заказе и в шапке*/ body.body-fixed { overflow: hidden; padding-right: 17px; } body.body-fixed .custom-popup { overflow: auto; } .custom-popup { height: 100%; width: 100%; position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 2999; background: rgba(0, 0, 0, 0.4); display: none; } .custom-popup .custom-popup__container { top: 0; left: 0; right: 0; z-index: 13; min-height: calc(100vh - 300px); display: flex; align-items: center; margin: 100px auto; max-width: 650px; } .custom-popup .popup__content { background: white; width: 100%; } .popup__content-header { border-bottom: 2px solid #62bb46; position: relative; } .popup__content-inner { padding: 35px 45px; } .popup__content-header-title { font-size: 26px; line-height: 33px; max-width: 550px; font-weight: 500; } .custom-popup .close { position: absolute; right: 30px; top: 30px; opacity: 1; display: block; } .popup__content-main { font-size: 18px; line-height: 23px; } .opportunity-list { list-style: none; margin-bottom: 30px; } .opportunity-list li { counter-increment: my-awesome-counter; margin-bottom: 15px; } .opportunity-list li::before { content: counter(my-awesome-counter) ". "; color: #D23F54; font-weight: bold; } .opportunity-list span { color: #D23F54; font-weight: 600; } .opportunity-btns { display: flex; gap: 15px; margin-bottom: 15px; } .btn.opportunity-btn { font-size: 17px; line-height: 18px; font-weight: 500; padding: 11px 40px } .opportunity-notice { margin-bottom: 30px; color: #888; font-size: 14px; } .opportunity-notice a { color: inherit; text-decoration: underline; } .opportunity-video { display: none; } .opportunity-video iframe { width: 100%; height: 270px; } @media (max-width: 768px) { .opportunity-btns { flex-direction: column; align-items: center; } .btn.opportunity-btn { width: 270px; } } @media(max-width: 600px) { .custom-popup .custom-popup__container { width: 80%; } .custom-popup .close { top: 15px; right: 15px; } .popup__content-inner { padding: 20px; } .popup__content-header-title { line-height: 1.3; font-size: 22px; } .popup__content-main { font-size: 16px; } .opportunity-list, .opportunity-notice{ margin-bottom: 20px; } .opportunity-list li { margin-bottom: 10px; } .btn.opportunity-btn { font-size: 16px; } .opportunity-video iframe { width: 200px; } }
На этом завершаю статью.
Результат будет таким:
Успехов в освоении новых знаний!
Комментарии находятся на модерации или не добавлены.
Для добавления комментариев необходимо зарегистрироваться и авторизоваться
Также возможно авторизоваться через Социальную сеть Вконтакте (VK)