minishop2 — всплывающее окно после нажатия на кнопку

minishop2 - всплывающее окно после нажатия на кнопку MODX Revo

Сегодня небольшой урок о том, как в MODX Revo реализовать всплывающее окно после нажатия на кнопку купить (в корзину) в минишоп 2.

Разметка модального окна

Модальное окно возьмем к примеру из 4 бутстрапа https://getbootstrap.com/docs/4.6/components/modal/ , пишу сразу готовый код:

<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="myModalLabel">Товар [[*pagetitle]] добавлен в корзину</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">×</span>
        </button>
      </div>
      <!--div class="modal-body">
        ...
      </div-->
      <div class="modal-footer">
        <button type="button" class="btn btn-primary" onclick="document.location = '/cart'">Оформить заказ</button>
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Продолжить покупки</button>
      </div>
    </div>
  </div>
</div>

где /cart — url корзины

Оживление модального окна

Вариант 1

Нам необходимо повешать функцию callbacks:

miniShop2.Callbacks.Cart.add.response.success = function()

Вот код под модальное окно на 4м бутстрапе:

<script>
miniShop2.Callbacks.Cart.add.response.success = function() {
// показываем модальное окно
$('#myModal').modal('show')
// закрываем, в случае, если "продолжить покупки"
$('.close').click(function(){
       $('#myModal').hide();
    });
// закрываем, в случае клика не по окну"
$(document).click(function(event) {
    if ($(event.target).closest(".modal-dialog").length) return;
    $("#myModal").hide("slow");
    event.stopPropagation();
  });
}
</script>

Все это добро просто подключаем (добавляем) в шаблон карточки товара. Все.

Вариант 2

Если 1й вариант не работает (скорее всего так и есть), тогда:

  • Копируем файл assets/components/minishop2/js/web/message_settings.js к примеру в папку assets/js
  • Подключаем скопированный файл в системной настройке ms2_frontend_message_js_settings = /assets/js/message_settings.js
  • Правим новый JS, нас интересует следующий кусок кода:
success: function (message) {
        if (typeof($.fn.jGrowl) === 'function') {
            miniShop2.Message.show(message, {
                theme: 'ms2-message-success',
                sticky: false
            });
        }
    },

Вставляем в него вызов модального окна ($('#myModal').modal('show')) вот так:

success: function (message) {
        if (typeof($.fn.jGrowl) === 'function') {
            miniShop2.Message.show(message, {
                theme: 'ms2-message-success',
                sticky: false
            });
        }
        $('#myModal').modal('show')
    },

Вот и все)

Поделиться с друзьями
Алексей

Веб-дизайнер и SEO оптимизатор. Занимаюсь созданием сайтов с 2010 года и их продвижение с 2012 года!

Оцените автора
( Пока оценок нет )
Web-Revenue.ru
Добавить комментарий

  1. Петр

    Код уже не работает

    Ответить
    1. Алексей автор

      Должен работать, но пока нет проектов где его можно проверить (без правок серьезных, модальных окон и т.д.)

      Ответить