web-dev-qa-db-fra.com

Comment puis-je supprimer complètement Bootstrap de l'interface de Joomla?

Récemment, j'ai essayé de supprimer toutes les instances de Bootstrap du front-end de Joomla à des fins de débogage. J'utilisais un modèle de squelette avec une installation relativement récente de Joomla 3.3. J'ai supprimé toutes les inclusions de = Bootstrap à partir du modèle et j'ai désactivé tous les plugins et modules que je pensais pouvoir charger. J'ai également vidé le cache Joomla. Malgré cela, firebug m'a dit que Joomla essayait toujours de charger bootstrap.min .js à partir de /media/jui/js/bootstrap.min.js

J'ai contourné le problème en renommant temporairement le fichier bootstrap), mais je me suis posé la question.

  • Est-ce que cela se produit avec toutes les installations de Joomla 3.3 ou est-ce juste la mienne?
  • Y at-il un moyen que je puisse identifier où bootstrap est chargé?)
  • Est-il possible de désactiver bootstrap du chargement?)
14
TryHarder

Est-ce que cela se produit avec toutes les installations de Joomla 3.3 ou est-ce juste la mienne?

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

Est-il possible de désactiver bootstrap du chargement?)

Oui il y a. Supprimez-le simplement avant de créer l'en-tête, à l'aide de l'événement onBeforeCompileHead ( Plus d'informations dans la documentation. ).

Compte tenu de la possibilité de relier la bibliothèque à tout moment par diverses 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 consistait à supprimer le script avant de créer 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']);
15
Jacek Labuda

Un autre hack que j'aime toujours jeter, puisqu'il n'implique pas l'édition de fichiers core, est de remplacer le fichier css par un fichier css vierge dans votre modèle. Cela entraînera toujours un appel à votre serveur pour charger la ressource, mais vous n'aurez pas besoin de style bootstrap).

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

Naturellement, toute configuration de composant à utiliser bootstrap sera sans 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'ont aucun impact sur le style.

15
David Fritsch

Juste une idée (non testée), mais pourquoi ne pas construire un petit plugin qui annule 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);
}
7
johanpw

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

Non défini 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 fichier js ou css même si vous le supprimez. Le moyen le plus fiable que j'ai découvert est avec:

JCC - Plugin de contrôle JS CSS

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

Cependant - vous aurez toujours parfois js inline inséré dans votre template.Alors - parfois vous aurez besoin de faire preg_replace pour le js inline.

4
iamrobert

C’est quelque chose qui m’a perturbé 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 bootstrap).

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

Le seul moyen de le supprimer (à ma connaissance) consiste à utiliser un hack essentiel dans le fichier suivant: (non recommandé)

bibliothèques\cms\html\bootstrap.php

La seule autre solution à laquelle je puisse penser est de créer un remplacement de modèle pour chaque module, composant et plug-in qui appelle la bibliothèque bootstrap et le supprime).

Aucune méthode n'est sympa, cependant Joomla 3.x a été construit sur Bootstrap, nous devons donc vivre avec cela

4
Lodder

Il y a deux manières:

  1. Supprimez les fichiers inclus dans votre modèle, puis créez un remplacement pour empêcher tout module ou composant que vous utilisez éventuellement de les inclure à nouveau (pas autant de travail que cela en a l'air).

    1. Utilisez n'importe lequel 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 complet sur le moment et le lieu de suppression des fichiers afin qu'il puisse être configuré pour ne pas interrompre l'édition frontale par exemple (qui, si vous supprimez tout sera cassé normalement).

L’option 2 présente un avantage en termes de facilité d’utilisation, mais vous devez toujours vivre avec un bémol crummy Bootstrap 2.x qui jette un voile sur votre site. Option 1 demande un peu plus de travail, mais signifie que vous pouvez le supprimer chaque trace de Bootstrap; toujours mon option préférée. Voir http://joomlafuture.com/ pour un exemple de code.

3
Seth Warburton

Joomla ne charge pas bootstrap CSS automatiquement, 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 va charger 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 de modèle, puis en vérifiant quels fichiers de tête sont manquants.

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

Puisque 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 pas de dépendance si vous souhaitez désactiver Bootstrap du frontend et non du backend.

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

$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 bootstrap URL du CDN si vous préférez).

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

2
Quinn

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

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

Dans beaucoup de positions de code je devais désactiver Bootstrap tel 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 framework d'interface utilisateur, je pense, vous devez également poursuivre ces processus et vous devez au moins disposer de plus de 30 composants, modules, plug-ins et de certains codes hérités Joomla que vous devez développer à nouveau. C'est simple mais nécessite beaucoup de temps.

Nouvelle perception 02 juillet 2015: basée sur la méthode "unset" de Joomla que certains de nos amis mentionnés dans ce forum, je pourrais 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 de mentionner la mauvaise solution. Vous pouvez lire ceci post pour obtenir plus d’informations sur la désactivation de Bootstrap.

1
Sami