Magento 2 मोडल पॉपअप बनाने के लिए कैसे बंद नहीं किया जा सकता है?


10

मैं एक मोडल पॉपअप बनाने की कोशिश कर रहा हूं जिसे बंद नहीं किया जा सकता। इसमें एक बटन है जो आपको अगले पेज पर ले जाता है, उस पर क्लिक करके, लेकिन मैं नहीं चाहता कि उपयोगकर्ता इसे बंद कर सकें।

मोडल पॉपअप को 3 तरीकों से बंद किया जा सकता है:

  1. [X]ऊपरी दाएं कोने में क्रॉस / बटन पर क्लिक करना
  2. दबाकर बच निकले
  3. ओवरले पर क्लिक करें

अब तक यह मेरा मोडल JS है और मुझे लगता है कि clickableOverlay: falseमैंने पहले से ही 3rd वन टैकल कर लिया है:

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

अपडेट करें:

मैंने दिए गए समाधानों को आजमाते समय मोडल को एक अलग तरीके से सेटअप करने की कोशिश की:

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


@KristofatFooman, hahaha, ठीक है, मैं मॉडल पाठ में जोड़ दूंगा: "कृपया F12 दबाएं, इस मॉडल का निरीक्षण करें और इसे बंद करने के लिए इसे DOM से निकालें"। मुझे लगता है कि आप सही हैं, काफी दिलचस्प हैं, लेकिन मैं उस जोखिम को स्वीकार करूंगा और उस एक को रोकने के लिए कोई भी उपाय लागू नहीं करूंगा।
7ochem

जवाबों:


10

मुझे modal.closeModal()मिक्सी के माध्यम से काम करने के लिए फ़ंक्शन का ओवरराइड नहीं मिल सका है और मुझे भी लगता है कि इसे मिक्सिन के माध्यम से करने से यह पूरी वेबसाइट के माध्यम से सभी मॉडल्स पर ओवरराइड हो जाता है, जो मुझे नहीं चाहिए। मुझे केवल इस एक मोडल पर इसकी आवश्यकता है।

मैं बस किसी भी ट्रिगर को हटाकर समाप्त हो जाएगा जो कॉल करेगा modal.closeModal()। कुछ अन्य मोडल विकल्प हैं जिनका उपयोग आप इसे प्राप्त करने के लिए कर सकते हैं:

  1. मैं openedविकल्प / घटना के साथ मोडल खोलने पर क्लोज बटन को छिपाता हूं जो मोडल के खुलने के ठीक बाद चालू हो जाएगा
  2. मैं keyEventHandlers.escapeKeyविकल्प को ओवरराइड कर रहा हूं

तो यह मेरा अंतिम कोड है:

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
अच्छा काम यह निश्चित रूप से इसे करने का सही तरीका है
राफेल एट डिजिटल पियानिज्म

7

मुझे लगता है कि उस मामले में मिश्रण का उपयोग करना प्रासंगिक होगा।

आप निम्नलिखित की कोशिश कर सकते हैं:

पहले अपने मॉड्यूल में, निम्नलिखित बनाएँ view/base/requirejs-config.js:

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

फिर बनाएं view/base/web/hook.js:

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

इस मिश्रण के साथ, आप closeModalविधि के कार्यान्वयन को अपनी विधि से बदलते हैं । उस स्थिति में, झूठे लौटने से मोडल बंद हो जाएगा।

साइड नोट: मुझे ऐसा करने के लिए आपसे नफरत है। अयोग्य पॉपअप को वेब से प्रतिबंधित किया जाना चाहिए।


3
मैंने ठीक वैसा ही किया, लेकिन फिर भी यह बंद हो गया। यदि मैं इसे अपने टर्मिनल में चलाता हूं, तो मैं देखता हूं कि jQuery.mage.modal.closeModalfunction() { return false; }
मिक्सिन

1
@ 7ochem शायद return false;पर्याप्त नहीं है। मैं ईमानदार होने के लिए जेएस के साथ आराम से सुपर नहीं हूं। मुझे लगता है कि आपको इस लेख को पढ़ना चाहिए इससे आपको समस्या को कम करने में मदद मिल सकती है या इसे करने का एक और संभावित तरीका मिल सकता है: alanstorm.com/the-curious-case-of-magento-2-mixins
at Digital Piansh

3
मुझे लगता है कि यह भी closeModal()फ़ंक्शन साइट को विस्तृत करता है, जो मुझे नहीं चाहिए। मैं केवल इस एकल मोडल के लिए इसे लागू करना चाहता हूं
7ochem
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.