मैं जूमला के सामने से बूटस्ट्रैप को पूरी तरह से कैसे हटा सकता हूं?


14

हाल ही में, मैंने डिबगिंग उद्देश्यों के लिए जूमला के सामने के छोर से बूटस्ट्रैप के सभी उदाहरणों को हटाने की कोशिश की। मैं जूमला 3.3 की अपेक्षाकृत नई स्थापना के साथ एक कंकाल टेम्पलेट का उपयोग कर रहा था। मैंने टेम्पलेट से बूटस्ट्रैप के सभी समावेशों को हटा दिया और मैंने सभी प्लगइन्स और मॉड्यूल को बंद कर दिया जो मुझे लगा कि इसे लोड किया जा सकता है। मैंने जूमला कैश भी क्लियर किया। इसके बावजूद, फायरबग ने मुझे बताया कि जूमला अभी भी बूटस्टैप.min.js को /media/jui/js/bootstrap.min.js से लोड करने की कोशिश कर रहा था

मुझे बूटस्ट्रैप फ़ाइल को अस्थायी रूप से नाम देकर समस्या का दौर मिला, लेकिन इसने मुझे आश्चर्यचकित कर दिया।

  • यह सब जूमला 3.3 प्रतिष्ठानों के साथ होता है या सिर्फ मेरा है?
  • क्या कोई ऐसा तरीका है जिससे मैं यह पहचान सकता हूं कि बूटस्ट्रैप को कहां से लोड किया जा रहा है?
  • क्या कोई तरीका है जिससे मैं लोडिंग से बूटस्ट्रैप को अक्षम कर सकता हूं?

जवाबों:


15

यह सब जूमला 3.3 प्रतिष्ठानों के साथ होता है या सिर्फ मेरा है?

संस्करण में: 3.2-3.7 (मैंने परीक्षण किया)।

क्या कोई तरीका है जिससे मैं लोडिंग से बूटस्ट्रैप को अक्षम कर सकता हूं?

हाँ वहाँ है। OnBeforeCompileHead ( डॉक्स में अधिक जानकारी ) घटना का उपयोग करके, हेडर बनाने से पहले इसे हटा दें ।

विभिन्न एक्सटेंशन द्वारा किसी भी समय पुस्तकालय को संलग्न करने की संभावना के मद्देनजर। यह टेम्पलेट और मॉड्यूल से कुछ लाइनों को हटाने के लिए पर्याप्त नहीं है। यह एक सही समाधान नहीं है। लेकिन आप यह सुनिश्चित कर सकते हैं कि यह लोड नहीं होगा।

अपने प्रोजेक्ट में मैं बूटस्ट्रैप 3.2 का उपयोग कर रहा हूं। मैंने बूटस्ट्रैप 2 को निकालने का एक तरीका खोजने के लिए पूरा दिन बिताया।

हेडर बनाने से पहले स्क्रिप्ट को हटाने का एकमात्र समाधान था।

मेरा समाधान एक प्लगइन टोकरा है:

class plgSystemYourPlugin extends JPlugin
{
    public function onBeforeCompileHead()
    {
        // Application Object
        $app = JFactory::getApplication();

        // Front only
        if( $app instanceof JApplicationSite )
        {
            $doc            = JFactory::getDocument();
            // Remove default bootstrap
            unset($doc->_scripts[JURI::root(true).'/media/jui/js/bootstrap.min.js']);
        }
    }
}

यह जूमला में काम करता है! 3.2-3.6

(रुचि के लिए) मुझे इसे हटाने की भी आवश्यकता थी:

    unset($doc->_scripts[JURI::root(true).'/media/system/js/frontediting.js']);
    unset($doc->_scripts[JURI::root(true).'/media/system/js/html5fallback.js']);

2
महान! मुझे अपना खुद का "निकालने के लिए jquery और बूचड़खाना" प्लगइन बनाने के लिए 5 मिनट का समय मिला।
अलेक्जेंड्रे पाउलो

16

एक वैकल्पिक हैक जिसे मैं हमेशा बाहर फेंकना पसंद करता हूं, क्योंकि इसमें कोर फ़ाइलों को संपादित करना शामिल नहीं है, अपने टेम्पलेट में एक खाली सीएसएस फ़ाइल के साथ सीएसएस फ़ाइल को ओवरराइड करना है। इसके बाद भी संसाधन लोड करने के लिए आपके सर्वर पर कॉल आएगा, लेकिन आपके पास बूटस्ट्रैप स्टाइल नहीं होगा।

बस यहाँ एक खाली फ़ाइल जोड़ें: templates/YOUR_TEMPLATE/css/jui/bootstrap.min.cssऔर templates/YOUR_TEMPLATE/js/jui/bootstrap.min.js

स्वाभाविक रूप से बूटस्ट्रैप का उपयोग करने के लिए कोई भी घटक सेटअप अस्थिर नहीं होगा, और ब्राउज़र द्वारा सीएसएस और जेएस फ़ाइलों को लोड करने के लिए कॉल अभी भी होगा। हालांकि, फाइलें खाली (छोटे डाउनलोड आकार) होंगी और स्टाइल पर कोई प्रभाव नहीं पड़ेगा।


इस तरह से कभी नहीं सोचा, अच्छा !!!
मोहम्मद अब्दुल मुजीब

7

बस एक विचार (परीक्षण नहीं किया गया), लेकिन बूटस्ट्रैप को अनसेट करने वाले एक छोटे प्लगइन के निर्माण के बारे में कैसे?

कुछ इस तरह:

public function onAfterRender() {
    //get the array containing all the script declarations
     $document = JFactory::getDocument(); 
     $headData = $document->getHeadData();
     $scripts = $headData['scripts'];

     //remove script
     unset($scripts['/media/jui/js/bootstrap.min.js']);
     $headData['scripts'] = $scripts;
     $document->setHeadData($headData);
}

4

यदि आप अपना स्वयं का प्लगइन बनाना नहीं देख रहे हैं, तो एक सरल उपाय आजमाया जाएगा:

खाके में परेशान

//JS
unset($doc->_scripts[$this->baseurl.'/media/jui/js/bootstrap.min.js']);
// CSS    
unset($doc->_stylesheets[$this->baseurl.'/media/jui/js/bootstrap.css']);

हालाँकि - कुछ एक्सटेंशन अभी भी js या css डालते हैं भले ही आप इसे हटा दें। मेरे द्वारा खोजा गया सबसे विश्वसनीय तरीका है:

JCC - JS CSS Control Plugin

http://extensions.joomla.org/extensions/extension/core-enhancements/performance/js-css-control

हालाँकि - आपके पास अभी भी कभी-कभी js इनलाइन आपके टेम्प्लेट में डाली जाएगी। इसलिए - कभी-कभी आपको इनलाइन js के लिए preg_replace करने की आवश्यकता होगी।


4

यह कुछ ऐसा है जिसने मुझे जूमला 3.x की शुरुआत के बाद से खराब कर दिया है और आज भी, उपयोगकर्ता को बूटस्ट्रैप फ़ाइलों को लोड होने से रोकने के लिए विकल्प देने के लिए कुछ भी नहीं किया गया है।

दुर्भाग्य से, बूटस्ट्रैप जुमला के मूल से लोड हो जाता है और यह कुछ मुख्य विशेषताओं के कारण होता है जो इसे काम करने की आवश्यकता होती है, इस प्रकार इसे पूरी तरह से हटाने से कुछ सुविधाएँ जैसे टूलटिप काम करने से रोकेंगी।

इसे हटाने का एकमात्र तरीका (जो मुझे पता है) निम्नलिखित फ़ाइल में एक कोर हैक के माध्यम से है: ( अनुशंसित नहीं )

पुस्तकालयों \ सेमी \ एचटीएमएल \ bootstrap.php

एकमात्र ऐसा तरीका है जिसके बारे में मैं सोच सकता हूं कि प्रत्येक मॉड्यूल, घटक और प्लगइन के लिए एक टेम्पलेट ओवरराइड बनाया जाए जो बूटस्ट्रैप लाइब्रेरी को कॉल करता है और इसे हटा देता है।

न तो विधि अच्छी है, लेकिन जूमला 3.x बूटस्ट्रैप पर बनाया गया था, इसलिए हमें इसके साथ रहना होगा


1
धन्यवाद लोदर ऐसा लगता है कि वे एक छोटे बटन पर विचार नहीं करते हैं। उम्मीद है कि वे इसे जूमला 3.4 :)
TryHarder

आपके पास कोर फाइलें नहीं होनी चाहिए। अवधि। बूटस्ट्रैप के सभी निशानों को हटाने के लिए बहुत सारे अन्य तरीके हैं, कोर फ़ाइलों को हैक किए बिना और उनमें से सभी बेहतर हैं। ये सभी एक जूमला अपडेट से भी बचे रहेंगे, जिसे हैक की गई कोर फाइल्स नहीं कहा जा सकता है।
सेथ वारबर्टन

@ सेठ, हाँ अब और भी रास्ते हैं। यह जवाब 9 महीने पहले लिखा गया था और उस समय, मुझे कोई और रास्ता नहीं पता था
Lodder

@Valentin डेस्पा, क्या आप मेरे लिए इस उत्तर को हटा सकते हैं क्योंकि मैं सक्षम नहीं हूं?
लोडर

@oooooo - मैंने अपने उत्तर से "स्वीकृत" झंडे को हटाने का अनुरोध किया है क्योंकि यह यहाँ समाधान नहीं है। यदि वे ऐसा करने में असमर्थ हैं, तो क्या आप किसी और के उत्तर को "स्वीकृत" के रूप में चिह्नित करने का मन करेंगे?
लोडर

3

इसके दो तरीके हैं:

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

    1. ऐसा करने वाले कई सिस्टम प्लग इन में से किसी एक का उपयोग करें। व्यक्तिगत रूप से, मैं इसे एक https://github.com/phproberto/plg_sys_mootable के रूप में सुझाऊंगा, क्योंकि यह फ़ाइलों को कब और कहाँ से हटाने का पूर्ण नियंत्रण देता है, इसलिए इसे उदाहरण के लिए फ्रंट-एंड एडिटिंग को नहीं तोड़ने के लिए सेट किया जा सकता है (जिसे यदि आप हटा दें सब कुछ सामान्य रूप से टूट जाएगा)।

विकल्प 2 का उपयोग करने में आसानी है, लेकिन आपको अभी भी अपनी साइट पर कूड़े बूटीकैप 2.x मार्कअप लेटरिंग के साथ रहना होगा। विकल्प 1 थोड़ा और काम लेता है लेकिन इसका मतलब है कि आप बूटस्ट्रैप के हर निशान को हटा सकते हैं ; हमेशा मेरा पसंदीदा विकल्प। उदाहरण कोड के लिए http://joomlafuture.com/ देखें ।


2

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

<jdoc:include type="head" />

यह इस क्रम में म्यूटूल, जेकरी और बूटस्ट्रैप फ़ाइलों को लोड करेगा:

<script src="/media/system/js/mootools-core.js" type="text/javascript"></script>
<script src="/media/system/js/core.js" type="text/javascript"></script>
<script src="/media/system/js/caption.js" type="text/javascript"></script>
<script src="/media/system/js/mootools-more.js" type="text/javascript"></script>
<script src="/media/jui/js/jquery.min.js" type="text/javascript"></script>
<script src="/media/jui/js/jquery-noconflict.js" type="text/javascript"></script>
<script src="/media/jui/js/bootstrap.min.js" type="text/javascript"></script>

यह CSS फाइलों को लोड नहीं करता है। आप अपनी टेम्प्लेट फ़ाइल से लाइन को हटाकर इसका परीक्षण कर सकते हैं, फिर जांच कर सकते हैं कि कौन सी फ़ाइल गायब हो गई हैं।

बूटस्ट्रैप CSS आपके टेम्प्लेट द्वारा लोड किया गया है। जूमला (2.5 के बाद से मेरा मानना ​​है) आसान पहुंच के लिए बूटस्ट्रैप 2.x को अपनी मीडिया फ़ाइलों में शामिल किया। किसी कारण से प्रोटॉस्टार मीडिया फ़ाइलों से बूटस्ट्रैप नहीं कहता है। इसके बजाय, उन्होंने पूरे बूटस्ट्रैप सीएसएस को अपने टेम्पलेट.केएस फ़ाइल में कॉपी और पेस्ट किया है। अन्य ढांचे बूटस्ट्रैप कहते हैं। उदाहरण के लिए, ताना 7 में बूटस्ट्रैप को सक्षम या अक्षम करने के लिए एक चेकबॉक्स है।

चूंकि फ्रंटएंड और बैकएंड के अलग-अलग टेम्प्लेट हैं, इसलिए बूटस्ट्रैप को एक या दूसरे के लिए लोड या अक्षम किया जा सकता है। अगर आप बैकएंड से बूटस्ट्रैप को अक्षम करना चाहते हैं और बैकएंड नहीं है तो कोई निर्भरता नहीं है।

मेरी प्राथमिकता बूटस्ट्रैप 3 है, इसलिए कई अलग-अलग कस्टम टेम्प्लेट पर, मैंने जूमला हेड लाइन के बाद अपने टेम्पलेट हेड में बूटस्ट्रैप 3 सीएसएस को अपने टेम्पलेट हेड टैग्स में डाउनलोड और शामिल किया है:

$document = JFactory::getDocument();
$document->setMetaData( 'viewport', 'width=device-width, initial-scale=1, minimum-scale=1' );
$document->addStyleSheet($this->baseurl.'/templates/'.$this->template.'/css/bootstrap.min.css');

Warp 7. जैसे फ्रेमवर्क के लिए विधि थोड़ी अलग है। आप चाहें तो बूटस्ट्रैप CDN url से भी सीधे लोड कर सकते हैं।

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


1

जूमला 3.3 (इससे कम) बूटस्ट्रैप 2.3 नहीं बूटस्ट्रैप 3. एक्स पर आधारित है

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

कोड के कई पदों में मुझे बूटस्ट्रैप को इस तरह के कोड से निष्क्रिय करना पड़ा:

// जावास्क्रिप्ट चौखटे जोड़ें JHtml :: _ ('bootstrap.framework');

और ऐसा करने के लिए एक नया पूरी तरह से जूमला टेम्पलेट बनाया; लेकिन अगर आपको लगता है कि मैं एक और यूआई फ्रेमवर्क पर जाना चाहता हूं, तो आपको ये प्रक्रिया जारी रखनी होगी और कम से कम आपके पास 30 से अधिक कंपोनेंट, मॉड्यूल, प्लगइन्स और कुछ जूमला विरासत कोड हैं जिन्हें आपको फिर से विकसित करना है। यह सरल है लेकिन कई बार इसकी जरूरत होती है।

नई धारणा ०२ जुलाई २०१५: जूमला में "अनसेट" पद्धति पर आधारित है कि इस मंच में वर्णित हमारे कुछ दोस्तों ने बूटस्ट्रैप और म्यूटूल या किसी अन्य जावास्क्रिप्ट लाइब्रेरी या सीएसएस फ़ाइल के पिछले संस्करण को पूरी तरह से अक्षम कर दिया था। बुरा हल बताने से पहले मुझे खेद है। बूटस्ट्रैप को निष्क्रिय करने के लिए अधिक जानकारी प्राप्त करने के लिए आप इस पोस्ट को पढ़ सकते हैं


अच्छा पकड़ा। बूटस्ट्रैप 3 एक गलती है। मैं इसे अभी संपादित करूँगा।
२०:४३ पर २०

-2

या आप यूथेमे से एक टेम्पलेट का उपयोग कर सकते हैं, इसे डिफ़ॉल्ट के रूप में सेट कर सकते हैं, फिर उस टेम्पलेट में कॉन्फ़िगर करें "बूटस्ट्रैप लोड न करें।"


3
आप मूल रूप से 49 यूरो को बूटस्ट्रैप हटाने के लिए कह रहे हैं यह भी एक विकल्प है?
Lodder
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.