जूमला 3.4.1, JQuery के साथ बुलाया JCaption को कैसे हटाएं?


10

मैं JCaption को सिर, jquery और jcaption फ़ाइल से हटाना चाहता हूं जिसे मैंने निम्नलिखित विधियों के साथ निष्क्रिय कर दिया है:

unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery.min.js']);
unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery-noconflict.js']);
unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery-migrate.min.js']);
unset($doc->_scripts[JURI::root(true) . '/media/system/js/caption.js']);

पिछले संस्करणों पर jcaption को हटाने के लिए जहां म्यूटूल का उपयोग करना आवश्यक है:

$this->_script = preg_replace('%window\.addEvent\(\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\'\);\s*}\);\s*%', '', $this->_script);

मैंने इसे भी jquery पर हटाने की कोशिश की, लेकिन मेरे पास preg_replace () अनुभव नहीं है, JCatpion को सिर से हटाने के लिए क्या करना है?

मेरा कोड:

$this->_script = preg_replace('%jQuery\(window\)\.on(\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\');\s*}\);\s*%', '', $this->_script);

जवाबों:


5

यह एक बहुत पुराना प्रश्न है और शायद अब इसे कोई नहीं पढ़ता है, लेकिन मैं अपना उत्तर पोस्ट करूंगा।

JQueryकैप्शन के लिए regex में आपकी त्रुटियाँ हैं। आपको डॉट्स से बचने की आवश्यकता नहीं है, लेकिन आपको विशेष पात्रों से बचना होगा। और आपको सरणी में सही कुंजी को लक्षित करने की भी आवश्यकता है ताकि आपको ['text/javascript']स्क्रिप्ट ऑब्जेक्ट को कॉल करने के बाद जोड़ना पड़े ।

तो सही regex / preg_replace होगा:

$this->_script['text/javascript'] = preg_replace('%jQuery\(window\).on\(\'load\',\s*function\(\)\s*\{\s*new\s*JCaption\(\'img.caption\'\)\;\s*\}\)\;\s*%', '', $this->_script['text/javascript']);

बहुत पहले नहीं, मैं भी रेगेक्स से जूझ रहा था, लेकिन इस साइट ने बहुत मदद की: http://regexr.com/ यदि आप साइट नोट को आज़मा रहे हैं, तो आपको खुले और करीबी टैग का उपयोग करने की आवश्यकता नहीं है क्योंकि इसके पहले से ही स्वचालित रूप से ।


एकल उद्धरण से बचने के लिए, दोहरे उद्धरण चिह्नों में पैटर्न लपेटें। अर्धविराम से बचने की आवश्यकता नहीं है। जबकि बचने वाले डॉट्स अभी भी इस मामले में अपेक्षित परिणाम नहीं देंगे, यह पैटर्न में "किसी भी चरित्र" मेटाचैकर के बजाय शाब्दिक डॉट्स से मिलान करने के लिए अधिक सटीक / कुशल है, इसलिए मैं डॉट्स से बचने की सलाह देता हूं।
mickmackusa

4

इसे इस्तेमाल करे:

$this->_scripts = array();
unset($this->_script['text/javascript']);

यह महान है! मुझे उन सभी
परेशानियों

यह जानकर अच्छा लगता है कि मैं आपके लिए एक मददगार था :)
साहिल पुरव

उम्मीद है कि इसने मूल पोस्टर की मदद की और वे आपको जवाब के रूप में स्वीकार करते हैं! धन्यवाद फिर से
mmundiff

2

इसे इस्तेमाल करे:

if (isset($this->_script['text/javascript']))
{ $this->_script['text/javascript'] = preg_replace('%window\.addEvent\    (\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\'\);\s*}\);\s*%',     '', $this->_script['text/javascript']);
if (empty($this->_script['text/javascript']))
unset($this->_script['text/javascript']);}
$this->_scripts = array();

0

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

public function onBeforeRender() {
    // Front end
    if ($this->app instanceof JApplicationSite) {
        $doc = JFactory::getDocument();

        foreach ($doc->_script as $key => $script) {
            if (stristr($key, 'text/javascript') !== false) {
                unset($doc->_script['text/javascript']);
            }
        }
    }
}

न केवल php मैनुअल की घोषणा करता strstr()है कि strpos()एक स्ट्रिंग स्ट्रिंग के अस्तित्व की जाँच करते समय की तुलना में कम कुशल है , इस कार्य के लिए एक स्ट्रिंग की खोज करने की आवश्यकता नहीं है - $keyपूर्ण स्ट्रिंग मैच है।
mickmackusa
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.