J'essaie de créer une fenêtre contextuelle modale qui ne peut pas être fermée. Il a un bouton qui vous amène à la page suivante en cliquant dessus, mais je ne veux pas que les utilisateurs puissent le fermer.
Le popup modal peut être fermé de 3 manières:
- Cliquer sur la croix / le
[X]
bouton dans le coin supérieur droit - En appuyant sur échapper
- Cliquez sur la superposition
Jusqu'à présent, c'est mon JS modal et je pense clickableOverlay: false
que j'ai déjà abordé le 3ème:
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 = '/';
}
}]
});
}
);
MISE À JOUR:
J'ai également essayé de configurer le modal d'une manière différente en essayant les solutions fournies:
require(
[ 'jquery', 'Magento_Ui/js/modal/modal' ],
function($, modal) {
modal({
//options
}, $("#popup"));
}
);
Réponses:
Je ne pouvais pas obtenir un remplacement de la
modal.closeModal()
fonction pour travailler via des mixins et je pense également que le faire via un mixin le fait passer par tout le site Web sur tous les modaux, ce que je ne veux pas. Je n'en ai besoin que sur ce seul modal.J'ai fini par supprimer simplement tout déclencheur qui appellera
modal.closeModal()
. Il existe d'autres options modales que vous pouvez utiliser pour y parvenir:opened
option / événement qui sera déclenché juste après l'ouverture du modalkeyEventHandlers.escapeKey
optionVoici donc mon code final:
la source
Je pense que l'utilisation de mixins dans ce cas serait pertinente.
Vous pouvez essayer ce qui suit:
Tout d'abord dans votre module, créez ce qui suit
view/base/requirejs-config.js
:Créez ensuite
view/base/web/hook.js
:Avec ce mixin, vous remplacez l'implémentation de la
closeModal
méthode par votre propre méthode. Dans ce cas, renvoyer false éviterait de fermer le modal.la source
jQuery.mage.modal.closeModal
me donnefunction() { return false; }
return false;
n'est peut - être pas suffisant. Pour être honnête, je ne suis pas très à l'aise avec JS. Je pense que vous devriez lire cet article, il peut vous aider à affiner le problème ou à trouver une autre façon de le faire: alanstorm.com/the-curious-case-of-magento-2-mixinscloseModal()
fonction à l'échelle du site, ce que je ne veux pas. Je veux seulement l'appliquer à ce modal unique