Сегодня небольшой урок о том, как в 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')
},
Вот и все)

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