Kapatılamayan bir Magento 2 Kalıcı açılır pencere nasıl oluşturulur?


10

Kapatılamayan kalıcı bir açılır pencere oluşturmaya çalışıyorum. Sizi tıklayarak bir sonraki sayfaya götüren bir düğme var, ancak kullanıcıların onu kapatabilmesini istemiyorum.

Kalıcı açılır pencere 3 şekilde kapatılabilir:

  1. [X]Sağ üst köşedeki çarpı / düğmeyi tıklama
  2. Acil kaçış
  3. Yer paylaşımını tıklayın

Şimdiye kadar bu benim modal JS ve ben clickableOverlay: falsezaten 3 ile mücadele ettik düşünüyorum :

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 = '/';
                }
            }]
        });
    }
);

GÜNCELLEME:

Ayrıca, sağlanan çözümleri denerken modalı farklı bir şekilde ayarlamaya çalıştım:

require(
    [ 'jquery', 'Magento_Ui/js/modal/modal' ],
    function($, modal) {
        modal({
            //options
        }, $("#popup"));
    }
);

1
4. Takılan kipi
DOM'dan

@KristofatFooman, hahaha, Tamam, modsal metne ekleyeceğim: "Lütfen F12 tuşuna basın, bu modu inceleyin ve kapatmak için DOM'dan çıkarın". Bence haklısın, oldukça ilginç bir risk, ama bu riski kabul edeceğim ve bunu önlemek için herhangi bir önlem almayacağım.
7ochem

Yanıtlar:


10

Ben modal.closeModal()mixins üzerinden çalışmak için bir işlev geçersiz kılma alamadım ve ayrıca ben bir mixin aracılığıyla bunu yapmak istemiyorum tüm modals tüm web sitesi geçersiz kılar yapar düşünüyorum. Sadece bu modda ihtiyacım var.

Ben sadece arayacak herhangi bir tetikleyici kaldırarak sona erdi modal.closeModal(). Bunu başarmak için kullanabileceğiniz başka modal seçenekler de vardır:

  1. Modun açılmasındaki kapatma düğmesini, modun açılmasından openedhemen sonra tetiklenecek olan seçenek / olayla gizliyorum
  2. Bu keyEventHandlers.escapeKeyseçeneği geçersiz kılıyorum

Bu benim son kodum:

require(
    [ 'jquery', 'Magento_Ui/js/modal/modal' ],
    function($, modal) {
        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 = '/';
                }
            }],
            opened: function($Event) {
                $('.modal-header button.action-close', $Event.srcElement).hide();
            },
            keyEventHandlers: {
                escapeKey: function () { return; }
            }
        }, $("#popup"));
    }
);

1
İyi iş kesinlikle bunu yapmanın doğru yolu
Raphael at Digital Pianism at

7

Bu durumda mixins kullanmayı düşünürüm.

Aşağıdakileri deneyebilirsiniz:

İlk olarak modülünüzde aşağıdakileri oluşturun view/base/requirejs-config.js:

var config = {
    'config':{
        'mixins': {
            'Magento_Ui/js/modal/modal': {
                'Vendor_Module/hook':true
            }
        }
    }
}; 

Sonra oluşturun view/base/web/hook.js:

define([], function(){
    'use strict';    
    return function(targetModule){
        targetModule.closeModal = function(){
            return false;
        }
        return targetModule;
    };
});

Bu mixin ile, closeModalyöntemin uygulanmasını kendi yönteminizle değiştirirsiniz. Bu durumda, false değerini döndürmek, modun kapatılmasını önler.

Yan not: Bunu yaptığınız için senden nefret ediyorum. Kapatılamayan pop-up'lar web'den yasaklanmalıdır.


3
Tam olarak yaptım, ama yine de kapanıyor. Bunu terminalimde çalıştırırsam, jQuery.mage.modal.closeModalfunction() { return false; }
mixinin

1
@ 7ochem belki return false;yeterli değil. Ben dürüst olmak gerekirse JS ile rahat süper değilim. Bu makaleyi okumanız gerektiğini düşünüyorum, sorunu daraltmanıza veya başka bir olası yol bulmanıza yardımcı olabilir: alanstorm.com/the-curious-case-of-magento-2-mixins
Raphael at Digital

3
Sanırım bu da closeModal()istemediğim geniş işlev alanının yerini alıyor . Bunu sadece bu tek
modele
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.