Wie kann ich Bootstrap vollständig vom Frontend von Joomla entfernen?

14

Vor kurzem habe ich versucht, alle Instanzen von Bootstrap aus dem Front-End von Joomla zu Debugging-Zwecken zu entfernen. Ich habe eine Skelettvorlage mit einer relativ neuen Installation von Joomla 3.3 verwendet. Ich habe alle Einschlüsse von Bootstrap aus der Vorlage entfernt und alle Plugins und Module deaktiviert, von denen ich dachte, dass sie geladen werden könnten. Ich habe auch den Joomla-Cache geleert. Trotzdem hat mir Firebug mitgeteilt, dass Joomla immer noch versucht, bootstrap.min.js von /media/jui/js/bootstrap.min.js zu laden

Ich habe das Problem umgangen, indem ich die Bootstrap-Datei vorübergehend umbenannt habe, aber ich habe mich gefragt.

  • Passiert das bei allen Joomla 3.3-Installationen oder gehört es nur mir?
  • Kann ich feststellen, von wo aus Bootstrap geladen wird?
  • Gibt es eine Möglichkeit, das Laden von Bootstrap zu deaktivieren?
TryHarder
quelle

Antworten:

15

Passiert das bei allen Joomla 3.3-Installationen oder gehört es nur mir?

In der Version: 3.2-3.7 (habe ich getestet).

Gibt es eine Möglichkeit, das Laden von Bootstrap zu deaktivieren?

Ja da ist. Entfernen Sie es einfach, bevor Sie den Header erstellen, indem Sie das Ereignis onBeforeCompileHead verwenden ( Weitere Informationen in den Dokumenten ).

Im Hinblick auf die Möglichkeit, die Bibliothek jederzeit durch verschiedene Erweiterungen anzubinden. Es reicht nicht aus, nur wenige Zeilen aus der Vorlage und den Modulen zu entfernen. Dies ist keine perfekte Lösung. Aber Sie können sicher sein, dass es nicht geladen wird.

In meinem Projekt verwende ich Bootstrap 3.2. Ich habe den ganzen Tag damit verbracht, einen Weg zu finden, Bootstrap 2 zu entfernen.

Die einzige Lösung bestand darin, das Skript vor dem Erstellen des Headers zu entfernen.

Meine Lösung ist, ein Plugin zu erstellen:

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

Es funktioniert in Joomla! 3.2-3.6

(Für interessierte) Ich musste auch dieses entfernen:

    unset($doc->_scripts[JURI::root(true).'/media/system/js/frontediting.js']);
    unset($doc->_scripts[JURI::root(true).'/media/system/js/html5fallback.js']);
Jacek Labuda
quelle
2
Groß! Ich habe 5 Minuten gebraucht, um mein eigenes Plugin zum Entfernen von JQuery und Boostrap zu erstellen.
Alexandre Paulo
16

Ein alternativer Hack, den ich immer wieder gerne verwerfe, da es nicht darum geht, Kerndateien zu bearbeiten, besteht darin, die CSS-Datei mit einer leeren CSS-Datei in Ihrer Vorlage zu überschreiben. Dies führt weiterhin zu einem Aufruf an Ihren Server, um die Ressource zu laden, Sie müssen jedoch kein Bootstrap-Styling verwenden.

Fügen Sie hier einfach eine leere Datei hinzu: templates/YOUR_TEMPLATE/css/jui/bootstrap.min.cssund templates/YOUR_TEMPLATE/js/jui/bootstrap.min.js.

Natürlich sieht jedes Komponentensetup, das Bootstrap verwendet, unstyled aus, und es wird immer noch ein Aufruf zum Laden der CSS- und JS-Dateien durch den Browser angezeigt. Die Dateien sind jedoch leer (kleine Downloadgröße) und haben keinen Einfluss auf das Styling.

David Fritsch
quelle
Niemals so gedacht, cool !!!
Mohd Abdul Mujib
7

Nur eine Idee (nicht getestet), aber wie wäre es mit einem kleinen Plugin, das Bootstrap deaktiviert?

Etwas wie das:

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

Wenn Sie nicht daran interessiert sind, ein eigenes Plugin zu erstellen, können Sie einfach Folgendes versuchen:

In Vorlage nicht gesetzt

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

Einige Erweiterungen fügen jedoch immer noch das js oder das css ein, auch wenn Sie es entfernen. Der zuverlässigste Weg, den ich entdeckt habe, ist mit:

JCC - JS CSS Control Plugin

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

Allerdings haben Sie manchmal immer noch js inline in Ihrer Vorlage eingefügt. Manchmal müssen Sie preg_replace für die inline js ausführen.

iamrobert
quelle
4

Dies ist etwas, was mich seit Beginn von Joomla 3.x nervt und bis heute nichts getan hat, um dem Benutzer die Möglichkeit zu geben, das Laden der Bootstrap-Dateien zu verhindern.

Leider wird Bootstrap aus dem Kern von Joomla geladen. Dies ist auf einige Kernfunktionen zurückzuführen, die es erfordern, dass es funktioniert. Wenn Sie es also vollständig entfernen, können einige Funktionen nicht mehr ausgeführt werden, z. B. der Tooltip.

Die einzige Möglichkeit, es zu entfernen (die ich kenne), ist über einen Core-Hack in der folgenden Datei: ( nicht empfohlen )

Bibliotheken \ cms \ html \ bootstrap.php

Die einzige andere Möglichkeit, die mir in den Sinn kommt, besteht darin, für jedes Modul, jede Komponente und jedes Plugin, das die Bootstrap-Bibliothek aufruft, eine Vorlagenüberschreibung zu erstellen und diese zu entfernen.

Weder Methode ist schön, aber Joomla 3.x wurde auf Bootstrap gebaut, also müssen wir damit leben

Lodder
quelle
1
Vielen Dank Lodder. Es scheint ein bisschen kurzsichtig, dass sie keinen Aus-Knopf haben. Hoffentlich werden sie es zu Joomla 3.4 hinzufügen :)
TryHarder
Sie sollten keine Kerndateien haben. Zeitraum. Es gibt viele andere Möglichkeiten, um alle Spuren von Bootstrap zu entfernen, ohne Kerndateien zu hacken, und alle sind vorzuziehen. Alle von ihnen werden auch ein Joomla-Update überleben, was nicht für gehackte Kerndateien gilt.
Seth Warburton
@seth, ja jetzt gibt es andere möglichkeiten. Diese Antwort wurde vor 9 Monaten verfasst und zu der Zeit wusste ich keinen anderen Weg
Lodder
@Valentin Despa, könntest du bitte diese Antwort für mich löschen, da ich nicht in der Lage bin?
Lodder
@oooooo - Ich habe darum gebeten, das "Accepted" -Flag aus meiner Antwort zu entfernen, da dies hier nicht die Lösung ist. Wenn sie dazu nicht in der Lage sind, würde es Ihnen etwas ausmachen, die Antwort eines anderen als "akzeptiert" zu markieren?
Lodder
3

Es gibt zwei Möglichkeiten:

  1. Deaktivieren Sie die enthaltenen Dateien in Ihrer Vorlage und erstellen Sie eine Überschreibung, um zu verhindern, dass Module oder Komponenten, die Sie möglicherweise verwenden, sie erneut einschließen (nicht so viel Arbeit, wie es sich anhört).

    1. Verwenden Sie dazu eines der zahlreichen System-Plugins. Persönlich würde ich dieses https://github.com/phproberto/plg_sys_mootable empfehlen, da es die volle Kontrolle darüber gibt, wann und wo Dateien entfernt werden sollen, damit die Front-End-Bearbeitung nicht unterbrochen wird (was beispielsweise der Fall ist, wenn Sie es entfernen) alles wird normal kaputt sein).

Option 2 bietet den benutzerfreundlichen Vorteil, aber Sie müssen immer noch mit beschissenem Bootstrap 2.x-Markup leben, das Ihre Site verschmutzt. Option 1 erfordert etwas mehr Arbeit, bedeutet jedoch, dass Sie jede Spur von Bootstrap entfernen können . immer meine bevorzugte Option. Unter http://joomlafuture.com/ finden Sie einen Beispielcode.

Seth Warburton
quelle
2

Joomla lädt das Bootstrap-CSS nicht automatisch, aber das JS. Wenn Ihre Vorlage die Standardmethode verwendet, um den Joomla-Kopf zu laden:

<jdoc:include type="head" />

Es werden mootools, jquery und bootstrap Dateien in dieser Reihenfolge geladen:

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

Es werden keine CSS-Dateien geladen. Sie können dies testen, indem Sie die Zeile aus Ihrer Vorlagendatei entfernen und dann prüfen, welche Kopfdateien fehlen.

Das Bootstrap-CSS wird von Ihrer Vorlage geladen. Joomla (seit 2.5, glaube ich) hat Bootstrap 2.x in seine Mediendateien aufgenommen, um den Zugriff zu vereinfachen. Protostar ruft aus irgendeinem Grund kein Bootstrap von den Mediendateien auf. Stattdessen haben sie das gesamte Bootstrap-CSS in ihre template.css-Datei kopiert und eingefügt. Andere Frameworks nennen Bootstrap. Warp 7 verfügt beispielsweise über ein Kontrollkästchen zum Aktivieren oder Deaktivieren von Bootstrap.

Da das Frontend und das Backend unterschiedliche Vorlagen haben, kann Bootstrap für das eine und nicht für das andere geladen oder deaktiviert werden. Es besteht keine Abhängigkeit, wenn Sie Bootstrap vom Frontend und nicht vom Backend aus deaktivieren möchten.

Ich bevorzuge Bootstrap 3, daher habe ich in verschiedenen benutzerdefinierten Vorlagen das Bootstrap 3-CSS in meinen Vorlagenkopf nach der Joomla-Überschrift und in meine Vorlagenkopf-Tags heruntergeladen und eingefügt:

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

Die Methode unterscheidet sich geringfügig für Frameworks wie Warp 7. Sie können auch direkt von der Bootstrap-CDN-URL laden, wenn Sie dies vorziehen.

Daher zwingt Joomla Sie nicht, Bootstrap oder eine andere Version von Bootstrap zu verwenden, zumindest nicht für das CSS. Sie können auch andere ansprechende Frameworks verwenden, wenn Sie möchten. Es ist alles in der Vorlage erledigt. Keine Notwendigkeit für Hacks oder Plugins.

Quinn
quelle
1

Joomla 3.3 (kleiner als) basiert auf Bootstrap 2.3 und nicht auf Bootstrap 3.X

Ich wollte auf eine neue Version von Bootstrap migrieren, und es gab viele Positionen, die ich natürlich aufgrund meiner Idee ändern musste. Ich habe es aber erst kürzlich getan.

In vielen Positionen des Codes musste ich Bootstrap wie unten Code deaktivieren:

// JavaScript Frameworks hinzufügen JHtml :: _ ('bootstrap.framework');

und machte eine neue, vollständig Joomla-Vorlage, um das zu tun; Wenn Sie jedoch auf ein anderes UI-Framework migrieren möchten, müssen Sie diesen Prozess meines Erachtens ebenfalls fortsetzen, und Sie müssen mindestens 30 Komponenten, Module, Plugins und einige Joomla-Legacy-Codes neu entwickeln. Es ist einfach, braucht aber viel Zeit.

Neue Wahrnehmung 2. Juli 2015: Basierend auf der "unset" -Methode in Joomla, die einige unserer Freunde in diesem Forum erwähnt haben, konnte ich die vorherige Version von Bootstrap und Mootools oder eine andere Javascript-Bibliothek oder CSS-Datei vollständig deaktivieren. Es tut mir leid, bevor ich die schlechte Lösung erwähnte. Sie können diesen Beitrag lesen , um weitere Informationen zum Deaktivieren von Bootstrap zu erhalten

Sami
quelle
Schöner Fang. Bootstrap 3 ist ein Fehler. Ich werde es jetzt bearbeiten.
TryHarder
-2

Oder Sie können eine Vorlage von Yootheme verwenden, sie als Standard festlegen und dann in dieser Vorlagenkonfiguration "Bootstrap nicht laden" auswählen.

Jim Hill
quelle
3
Sie sagen im Grunde 49 Euro, um Bootstrap zu entfernen, ist auch eine Option?
Lodder