Próbuję utworzyć modalne okienko wyskakujące, którego nie można zamknąć. Ma przycisk, który prowadzi do następnej strony, klikając go, ale nie chcę, aby użytkownicy mogli go zamknąć.
Wyskakujące okno modalne można zamknąć na 3 sposoby:
- Kliknij krzyżyk /
[X]
przycisk w prawym górnym rogu - Naciśnięcie Escape
- Kliknij nakładkę
Jak dotąd jest to mój modalny JS i myślę clickableOverlay: false
, że już zająłem się trzecim:
require(
[ 'jquery', 'Magento_Ui/js/modal/modal' ],
function($, modal) {
$("#popup").modal({
autoOpen: true,
responsive: true,
clickableOverlay: false,
modalClass: 'modal-custom',
title: 'Popup',
buttons: [{
text: $.mage.__('Take me back to the homepage'),
class: 'action close-popup wide',
click: function () {
window.location.href = '/';
}
}]
});
}
);
AKTUALIZACJA:
Próbowałem też skonfigurować modal w inny sposób, wypróbowując dostarczone rozwiązania:
require(
[ 'jquery', 'Magento_Ui/js/modal/modal' ],
function($, modal) {
modal({
//options
}, $("#popup"));
}
);
magento2
javascript
magento-2.1
jquery
modal
7ochem
źródło
źródło
Odpowiedzi:
Nie mogłem uzyskać zastąpienia tej
modal.closeModal()
funkcji do pracy przez mixiny, a także myślę, że zrobienie tego przez mixin powoduje, że jest ona nadpisywana w całej witrynie na wszystkich modalach, których nie chcę. Potrzebuję go tylko na tym jednym module.Skończyło się po prostu usunięciem dowolnego wyzwalacza, który zadzwoni
modal.closeModal()
. Istnieje kilka innych opcji modalnych, których możesz użyć, aby to osiągnąć:opened
opcją / zdarzeniem, które zostanie uruchomione zaraz po otwarciu modalukeyEventHandlers.escapeKey
opcjęOto mój końcowy kod:
źródło
Myślę, że użycie mixin w tym przypadku byłoby odpowiednie.
Możesz spróbować:
Najpierw w module utwórz następujące elementy
view/base/requirejs-config.js
:Następnie utwórz
view/base/web/hook.js
:Za pomocą tego miksu zastępujesz implementację
closeModal
metody własną metodą. W takim przypadku zwrócenie wartości false pozwoliłoby uniknąć zamknięcia modalu.źródło
jQuery.mage.modal.closeModal
daje mifunction() { return false; }
return false;
nie wystarczy. Szczerze mówiąc, nie jestem zbyt spokojny z JS. Uważam, że powinieneś przeczytać ten artykuł, który może pomóc ci zawęzić problem lub znaleźć inny możliwy sposób: alanstorm.com/the-curious-case-of-magento-2-mixinscloseModal()
funkcję dla całej witryny, czego nie chcę. Chcę to zastosować tylko do tego pojedynczego modalu