Jak mogę całkowicie usunąć Bootstrap z interfejsu Joomla?

14

Ostatnio próbowałem usunąć wszystkie instancje Bootstrap z frontonu Joomla w celu debugowania. Użyłem szablonu szkieletu ze stosunkowo nową instalacją Joomla 3.3. Usunąłem wszystkie inkluzje Bootstrap z szablonu i wyłączyłem wszystkie wtyczki i moduły, które, jak sądzę, mogły go ładować. Wyczyściłem również pamięć podręczną Joomla. Mimo to firebug powiedział mi, że Joomla wciąż próbuje załadować bootstrap.min.js z /media/jui/js/bootstrap.min.js

Rozwiązałem ten problem, tymczasowo zmieniając nazwę pliku bootstrap, ale mnie to zastanowiło.

  • Czy dzieje się tak w przypadku wszystkich instalacji Joomla 3.3, czy tylko moja?
  • Czy istnieje sposób, aby określić, z którego miejsca ładowany jest bootstrap?
  • Czy istnieje sposób, aby wyłączyć ładowanie bootstrap?
Próbuj dalej
źródło

Odpowiedzi:

15

Czy dzieje się tak w przypadku wszystkich instalacji Joomla 3.3, czy tylko moja?

W wersji: 3.2-3.7 (testowałem).

Czy istnieje sposób, aby wyłączyć ładowanie bootstrap?

Tak jest. Po prostu usuń go przed zbudowaniem nagłówka, używając zdarzenia onBeforeCompileHead ( więcej informacji w dokumentach ).

Ze względu na możliwość dołączenia biblioteki w dowolnym momencie za pomocą różnych rozszerzeń. Nie wystarczy usunąć z szablonu i modułów kilka wierszy. To nie jest idealne rozwiązanie. Ale możesz być pewien, że się nie załaduje.

W moim projekcie używam bootstrap 3.2. Spędziłem cały dzień, aby znaleźć sposób na usunięcie bootstrap 2.

Jedynym rozwiązaniem było usunięcie skryptu przed zbudowaniem nagłówka.

Moje rozwiązanie polega na stworzeniu wtyczki:

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

Działa w Joomla! 3.2–3.6

(Dla zainteresowanych) Musiałem również usunąć to:

    unset($doc->_scripts[JURI::root(true).'/media/system/js/frontediting.js']);
    unset($doc->_scripts[JURI::root(true).'/media/system/js/html5fallback.js']);
Jacek Labuda
źródło
2
Świetny! Dzięki Tobie zajęło mi 5 minut, aby stworzyć własną wtyczkę „usuń jquery i boostrap”.
Alexandre Paulo,
16

Alternatywnym hackem, który zawsze lubię wyrzucać, ponieważ nie wymaga edycji podstawowych plików, jest zastąpienie pliku css pustym plikiem css w szablonie. Nadal będzie to powodować połączenie z serwerem w celu załadowania zasobu, ale nie będziesz musiał mieć stylu bootstrap.

Po prostu dodaj pusty plik tutaj: templates/YOUR_TEMPLATE/css/jui/bootstrap.min.cssi templates/YOUR_TEMPLATE/js/jui/bootstrap.min.js.

Oczywiście, każda konfiguracja komponentu do użycia bootstrap będzie wyglądać na niestylizowaną, a przeglądarka nadal będzie wywoływać ładowanie plików css i js. Pliki będą jednak puste (mały rozmiar pliku do pobrania) i nie będą miały wpływu na styl.

David Fritsch
źródło
Nigdy nie myślałem o tym w ten sposób, super !!!
Mohd Abdul Mujib
7

To tylko pomysł (nie przetestowany), ale co powiesz na zbudowanie małej wtyczki, która rozbija Bootstrap?

Coś takiego:

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);
}
johanpw
źródło
4

Jeśli nie chcesz tworzyć własnej wtyczki, prostym rozwiązaniem byłoby wypróbowanie:

Unset in Template

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

Jednak - niektóre rozszerzenia nadal wstawiają plik js lub css, nawet jeśli go usuniesz. Najbardziej niezawodny sposób, jaki odkryłem, to:

JCC - JS CSS Control Plugin

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

Jednak - czasem nadal będziesz mieć wstawione js w swoim szablonie, więc - czasami będziesz musiał zrobić preg_replace dla wbudowanego js.

iamrobert
źródło
4

Jest to coś, co mnie wkurzyło od początku Joomla 3.x i do dziś nie zrobiono nic, aby dać użytkownikowi opcję zapobiegania ładowaniu plików bootstrap.

Niestety, Bootstrap jest ładowany z rdzenia Joomla i jest to spowodowane niektórymi podstawowymi funkcjami, które wymagają jego działania, a zatem całkowite usunięcie go uniemożliwi działanie niektórych funkcji, takich jak Etykietka narzędzi.

Jedynym sposobem, aby go usunąć (o czym wiem) jest włamanie do rdzenia w następującym pliku: ( niezalecane )

biblioteki \ cms \ html \ bootstrap.php

Jedynym innym sposobem, jaki mogę wymyślić, jest utworzenie zastąpienia szablonu dla każdego modułu, komponentu i wtyczki, które wywołują bibliotekę bootstrap i usuwają ją.

Żadna z metod nie jest dobra, jednak Joomla 3.x została zbudowana na Bootstrap, więc musimy z tym żyć

Lodder
źródło
1
Dzięki Lodder. Trochę krótkowzroczny wydaje się, że nie mają przycisku wyłączenia. Mam nadzieję, że dodadzą go do Joomla 3.4 :)
TryHarder
Nie powinieneś mieć podstawowych plików. Kropka. Istnieje wiele innych sposobów na usunięcie wszystkich śladów Bootstrap, bez włamywania się do podstawowych plików i wszystkie są preferowane. Wszystkie z nich przetrwają także aktualizację Joomla, której nie można powiedzieć o zhakowanych plikach podstawowych.
Seth Warburton,
@seth, tak, teraz są inne sposoby. Ta odpowiedź została napisana 9 miesięcy temu i wtedy nie znałem innego sposobu
Lodder
@Valentin Despa, czy mógłbyś usunąć tę odpowiedź dla mnie, ponieważ nie jestem w stanie?
Lodder
@oooooo - Poprosiłem o usunięcie flagi „akceptowane” z mojej odpowiedzi, ponieważ nie jest to tutaj rozwiązanie. Jeśli nie są w stanie tego zrobić, czy mógłbyś oznaczyć czyjąś odpowiedź jako „zaakceptowaną”, proszę?
Lodder
3

Istnieją dwa sposoby:

  1. Odłącz załączone pliki z szablonu, a następnie utwórz przesłonięcie, aby zapobiec włączeniu ich przez dowolny moduł lub komponent (nie tyle pracy, ile się wydaje).

    1. Użyj dowolnej z wielu wtyczek systemowych, które mogą to zrobić. Osobiście polecam ten https://github.com/phproberto/plg_sys_mootable, ponieważ daje on pełną kontrolę nad tym, kiedy i gdzie należy usuwać pliki, dzięki czemu można go ustawić tak, aby nie przerywał na przykład edycji frontonu (który można usunąć wszystko się zepsuje normalnie).

Opcja 2 ma tę zaletę, że jest łatwa w użyciu, ale nadal musisz żyć z marnym Bootstrap 2.x zaśmiecającym twoją stronę. Opcja 1 wymaga nieco więcej pracy, ale oznacza, że ​​możesz usunąć każdy ślad Bootstrap; zawsze moja preferowana opcja. Zobacz http://joomlafuture.com/ na przykład kodu.

Seth Warburton
źródło
2

Joomla nie ładuje CSS automatycznie, ale ładuje JS. Jeśli szablon używa standardowej metody do załadowania głowicy Joomla:

<jdoc:include type="head" />

Załaduje pliki mootools, jquery i bootstrap w następującej kolejności:

<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>

Nie ładuje plików CSS. Możesz to przetestować, usuwając wiersz z pliku szablonu, a następnie sprawdzając, które pliki nagłówkowe giną.

CSS ładowania początkowego jest ładowany przez szablon. Joomla (od 2.5 uważam, że) włączyła Bootstrap 2.x do swoich plików multimedialnych dla łatwego dostępu. Protostar z jakiegoś powodu nie wywołuje bootstrapu z plików multimedialnych. Zamiast tego skopiowali i wkleili cały plik CSS ładowania początkowego do pliku template.css. Inne frameworki nazywają Bootstrap. Na przykład Warp 7 ma pole wyboru, aby włączyć lub wyłączyć Bootstrap.

Ponieważ frontend i backend mają różne szablony, Bootstrap może być ładowany lub wyłączany dla jednego, a nie drugiego. Nie ma zależności, jeśli chcesz wyłączyć Bootstrap z frontonu, a nie z backendu.

Preferuję Bootstrap 3, więc na kilku różnych niestandardowych szablonach pobrałem i umieściłem CSS Bootstrap 3 w mojej głowie szablonu po linii nagłówka Joomla i wewnątrz tagów mojej głowy:

$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');

Metoda ta jest nieco inna dla frameworków takich jak Warp 7. Możesz również załadować bezpośrednio z adresu URL CDN bootstrap, jeśli wolisz.

Więc Joomla nie zmusza cię do używania Bootstrap lub jakiejkolwiek wersji Bootstrap, przynajmniej dla CSS. Możesz użyć innych responsywnych ram, jeśli chcesz. Wszystko odbywa się w szablonie. Nie potrzeba hacków ani wtyczek.

Quinn
źródło
1

Joomla 3.3 (mniej niż) jest oparty na Bootstrap 2.3, a nie Bootstrap 3.X

Chciałem przeprowadzić migrację do nowej wersji Bootstrap, i było wiele pozycji, które oczywiście musiałem zmienić w zależności od mojego pomysłu. Zrobiłem to, ale bardzo niedawno.

W wielu pozycjach kodu musiałem wyłączyć Bootstrap, taki jak poniżej:

// Dodaj środowiska JavaScript JHtml :: _ ('bootstrap.framework');

i stworzyliśmy w tym celu nowy całkowicie szablon Joomla; ale myślę, że jeśli chcesz przeprowadzić migrację do innego frameworku interfejsu użytkownika, musisz także kontynuować ten proces, a przynajmniej masz ponad 30 komponentów, modułów, wtyczek i niektórych starszych kodów Joomla, które musisz opracować ponownie. To proste, ale wymaga wiele czasu.

Nowa percepcja 02 lipca 2015 r .: w oparciu o metodę „unset” w Joomla, którą niektórzy z naszych znajomych wspominali na tym forum, mogłem całkowicie wyłączyć poprzednią wersję Bootstrap i Mootools lub dowolną inną bibliotekę JavaScript lub plik CSS. Przepraszam, zanim wspomniałem o złym rozwiązaniu. możesz przeczytać ten post, aby uzyskać więcej informacji o wyłączeniu Bootstrap

Sami
źródło
Dobry chwyt. Bootstrap 3 to błąd. Będę to teraz edytować.
TryHarder
-2

Możesz też użyć szablonu z Yootheme, ustawić go jako domyślny, a następnie w konfiguracji szablonu wybierz „nie ładuj bootstrapu”.

Jim Hill
źródło
3
Mówisz w zasadzie, że 49 euro na usunięcie Bootstrap jest również opcją?
Lodder