Comment puis-je supprimer complètement Bootstrap du frontend de Joomla?

14

Récemment, j'ai essayé de supprimer toutes les instances de Bootstrap de l'extrémité avant de Joomla à des fins de débogage. J'utilisais un modèle squelette avec une installation relativement nouvelle de Joomla 3.3. J'ai supprimé toutes les inclusions de Bootstrap du modèle et j'ai désactivé tous les plugins et modules que je pensais pouvoir le charger. J'ai également effacé le cache Joomla. Malgré cela, Firebug m'a dit que Joomla essayait toujours de charger bootstrap.min.js depuis /media/jui/js/bootstrap.min.js

J'ai contourné le problème en renommant temporairement le fichier d'amorçage, mais cela m'a fait réfléchir.

  • Cela se produit-il avec toutes les installations de Joomla 3.3 ou est-ce juste le mien?
  • Existe-t-il un moyen d'identifier d'où est chargé le bootstrap?
  • Existe-t-il un moyen de désactiver le démarrage du chargement?
TryHarder
la source

Réponses:

15

Cela se produit-il avec toutes les installations de Joomla 3.3 ou est-ce juste le mien?

En version: 3.2-3.7 (j'ai testé).

Existe-t-il un moyen de désactiver le démarrage du chargement?

Oui il y a. Il suffit de le supprimer avant de créer l'en-tête, en utilisant l'événement onBeforeCompileHead ( Plus d'informations dans les documents ).

Compte tenu de la possibilité de joindre la bibliothèque à tout moment par différentes extensions. Il ne suffit pas de supprimer du modèle et des modules quelques lignes. Ce n'est pas la solution parfaite. Mais vous pouvez être sûr qu'il ne se chargera pas.

Dans mon projet, j'utilise bootstrap 3.2. J'ai passé toute la journée à trouver un moyen de supprimer bootstrap 2.

La seule solution était de supprimer le script avant de construire l'en-tête.

Ma solution est de créer un plugin:

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

Cela fonctionne dans Joomla! 3.2-3.6

(Pour les intéressés), je devais également supprimer ceci:

    unset($doc->_scripts[JURI::root(true).'/media/system/js/frontediting.js']);
    unset($doc->_scripts[JURI::root(true).'/media/system/js/html5fallback.js']);
Jacek Labuda
la source
2
Génial! Cela m'a pris 5 minutes pour créer mon propre plugin "supprimer jquery et boostrap" grâce à vous.
Alexandre Paulo
16

Un hack alternatif que j'aime toujours jeter, car cela n'implique pas la modification des fichiers core est de remplacer le fichier css par un fichier css vierge dans votre modèle. Cela conduira toujours à un appel à votre serveur pour charger la ressource, mais vous n'aurez pas à avoir de style d'amorçage.

Ajoutez simplement un fichier vide ici: templates/YOUR_TEMPLATE/css/jui/bootstrap.min.csset templates/YOUR_TEMPLATE/js/jui/bootstrap.min.js.

Naturellement, toute configuration de composant pour utiliser le bootstrap aura l'air dépourvu de style, et il y aura toujours un appel pour charger les fichiers css et js par le navigateur. Cependant, les fichiers seront vides (petite taille de téléchargement) et n'auront aucun impact sur le style.

David Fritsch
la source
Je n'y ai jamais pensé de cette façon, cool !!!
Mohd Abdul Mujib
7

Juste une idée (non testée), mais que diriez-vous de construire un petit plugin qui désactive Bootstrap?

Quelque chose comme ça:

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
la source
4

Si vous ne cherchez pas à créer votre propre plugin, une solution simple serait d'essayer:

Désactiver dans le modèle

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

Cependant - certaines extensions insèrent toujours le js ou le css même si vous le supprimez. Le moyen le plus fiable que j'ai découvert est avec:

JCC - Plugin de contrôle CSS JS

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

Cependant - vous aurez toujours parfois js inline toujours inséré dans votre template.So - parfois vous devrez faire preg_replace pour les js inline.

iamrobert
la source
4

C'est quelque chose qui m'a dérangé depuis le début de Joomla 3.x et toujours à ce jour, rien n'a été fait pour donner à l'utilisateur la possibilité d'empêcher le chargement des fichiers d'amorçage.

Malheureusement, Bootstrap est chargé à partir du noyau de Joomla et cela est dû à certaines fonctionnalités de base qui nécessitent qu'il fonctionne, donc le supprimer complètement empêchera certaines fonctionnalités de fonctionner telles que l'info-bulle.

La seule façon de le supprimer (que je sache) est via un hack de base dans le fichier suivant: ( non recommandé )

bibliothèques \ cms \ html \ bootstrap.php

La seule autre façon dont je peux penser est de créer un remplacement de modèle pour chaque module, composant et plugin qui appelle la bibliothèque d'amorçage et de le supprimer.

Aucune des deux méthodes n'est agréable, cependant Joomla 3.x a été construit sur Bootstrap, nous devons donc vivre avec

Lodder
la source
1
Merci Lodder. Il semble un peu myope qu'ils n'aient pas de bouton d'arrêt. J'espère qu'ils l'ajouteront à Joomla 3.4 :)
TryHarder
Vous ne devriez pas avoir de fichiers de base. Période. Il existe de nombreuses autres façons de supprimer toutes les traces de Bootstrap, sans pirater les fichiers de base et tous sont préférables. Tous survivront également à une mise à jour de Joomla, ce qui ne peut pas être dit des fichiers de base piratés.
Seth Warburton du
@seth, oui maintenant, il existe d'autres moyens. Cette réponse a été écrite il y a 9 mois et à l'époque, je ne connaissais pas d'autre moyen
Lodder
@Valentin Despa, pourriez-vous s'il vous plaît supprimer cette réponse pour moi car je ne suis pas en mesure de le faire?
Lodder
@oooooo - J'ai demandé que le drapeau "accepté" soit supprimé de ma réponse car ce n'est pas la solution ici. S'ils ne sont pas en mesure de le faire, cela vous dérangerait-il de marquer la réponse de quelqu'un d'autre comme "acceptée", s'il vous plaît?
Lodder
3

Il y a deux façons:

  1. Désactivez les fichiers inclus dans votre modèle, puis créez un remplacement pour empêcher tout module ou composant que vous utilisez de les inclure à nouveau (pas autant de travail qu'il y paraît).

    1. Utilisez l'un des nombreux plugins système qui peuvent le faire. Personnellement, je recommanderais celui-ci https://github.com/phproberto/plg_sys_mootable car il donne un contrôle total sur quand et où supprimer les fichiers afin qu'il puisse être défini pour ne pas interrompre l'édition frontale par exemple (ce qui si vous supprimez tout sera cassé normalement).

L'option 2 a l'avantage de la facilité d'utilisation, mais vous devez toujours vivre avec le balisage Bootstrap 2.x crasseux qui jonchent votre site. L'option 1 demande un peu plus de travail mais signifie que vous pouvez supprimer toute trace de Bootstrap; toujours mon option préférée. Voir http://joomlafuture.com/ pour un exemple de code.

Seth Warburton
la source
2

Joomla ne charge pas automatiquement le CSS d'amorçage, mais il charge le JS. Si votre modèle utilise la méthode standard pour charger la tête Joomla:

<jdoc:include type="head" />

Il chargera les fichiers mootools, jquery et bootstrap dans cet ordre:

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

Il ne charge pas les fichiers CSS. Vous pouvez le tester en supprimant la ligne de votre fichier modèle, puis en vérifiant quels fichiers de tête manquent.

Le CSS d'amorçage est chargé par votre modèle. Joomla (depuis 2.5 je crois) a inclus Bootstrap 2.x dans leurs fichiers multimédias pour un accès facile. Pour une raison quelconque, Protostar n'appelle pas bootstrap à partir des fichiers multimédias. Au lieu de cela, ils ont copié et collé la totalité du CSS d'amorçage dans leur fichier template.css. D'autres frameworks appellent Bootstrap. Warp 7, par exemple, possède une case à cocher pour activer ou désactiver Bootstrap.

Étant donné que le frontend et le backend ont des modèles différents, Bootstrap peut être chargé ou désactivé pour l'un et pas pour l'autre. Il n'y a aucune dépendance si vous souhaitez désactiver Bootstrap depuis le frontend et non le backend.

Ma préférence est Bootstrap 3, donc sur plusieurs modèles personnalisés différents, j'ai téléchargé et inclus le CSS bootstrap 3 dans ma tête de modèle après la ligne de tête joomla et dans mes balises de tête de modèle:

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

La méthode est légèrement différente pour les frameworks tels que Warp 7. Vous pouvez également charger directement à partir de l'URL du CDN de bootstrap si vous préférez.

Joomla ne vous oblige donc pas à utiliser Bootstrap ou toute version de Bootstrap, au moins pour le CSS. Vous pouvez utiliser d'autres cadres réactifs si vous le souhaitez. Tout est fait dans le modèle. Pas besoin de hacks ou de plugins.

Quinn
la source
1

Joomla 3.3 (inférieur à) est basé sur Bootstrap 2.3 et non sur Bootstrap 3.X

Je voulais migrer vers la nouvelle version de Bootstrap, et il y avait beaucoup de positions que je devais changer bien sûr en fonction de mon idée. Je l'ai fait mais très récemment.

Dans de nombreuses positions de code, j'ai dû désactiver Bootstrap tel que le code ci-dessous:

// Ajouter des cadres JavaScript JHtml :: _ ('bootstrap.framework');

et fait un nouveau modèle complètement Joomla pour le faire; mais si vous voulez migrer vers un autre cadre d'interface utilisateur, je pense que vous devez également poursuivre ce processus et au moins vous avez plus de 30 composants, modules, plugins et certains codes hérités Joomla que vous devez à nouveau développer. C'est simple mais nécessite beaucoup de temps.

Nouvelle perception 02 juillet 2015: basé sur la méthode "unset" dans Joomla que certains de nos amis ont mentionné dans ce forum, je pouvais complètement désactiver la version précédente de Bootstrap et Mootools ou toute autre bibliothèque Javascript ou fichier CSS. Je suis désolé avant d'avoir mentionné une mauvaise solution. vous pouvez lire cet article pour obtenir plus d'informations sur la désactivation de Bootstrap

Sami
la source
Belle prise. Bootstrap 3 est une erreur. Je vais le modifier maintenant.
TryHarder
-2

Ou vous pouvez utiliser un modèle de Yootheme, le définir par défaut, puis dans cette configuration de modèle, sélectionnez «ne pas charger le bootstrap».

Jim Hill
la source
3
Vous dites essentiellement que 49 euros pour supprimer Bootstrap est également une option?
Lodder