Come posso rimuovere completamente Bootstrap dal frontend di Joomla?


14

Di recente, ho provato a rimuovere tutte le istanze di Bootstrap dal front-end di Joomla per scopi di debug. Stavo usando un modello di scheletro con un'installazione relativamente nuova di Joomla 3.3. Ho rimosso tutte le inclusioni di Bootstrap dal modello e ho spento tutti i plugin e i moduli che pensavo potessero caricarlo. Ho anche cancellato la cache di Joomla. Nonostante ciò, firebug mi ha detto che Joomla stava ancora cercando di caricare bootstrap.min.js da /media/jui/js/bootstrap.min.js

Ho risolto il problema rinominando temporaneamente il file bootstrap, ma mi ha fatto riflettere.

  • Questo succede con tutte le installazioni di Joomla 3.3 o è solo mia?
  • Esiste un modo per identificare da dove viene caricato bootstrap?
  • Esiste un modo per disabilitare il caricamento di bootstrap?

Risposte:


15

Questo succede con tutte le installazioni di Joomla 3.3 o è solo mia?

Nella versione: 3.2-3.7 (ho testato).

Esiste un modo per disabilitare il caricamento di bootstrap?

Si C'è. Basta rimuoverlo prima di creare l'intestazione, usando event onBeforeCompileHead ( Ulteriori informazioni nei documenti. ).

Vista la possibilità di allegare la biblioteca in qualsiasi momento da varie estensioni. Non è sufficiente rimuovere dal modello e dai moduli poche righe. Questa non è la soluzione perfetta. Ma puoi essere sicuro che non si caricherà.

Nel mio progetto sto usando bootstrap 3.2. Ho trascorso l'intera giornata a trovare un modo per rimuovere bootstrap 2.

L'unica soluzione era rimuovere lo script prima di creare l'intestazione.

La mia soluzione è creare 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']);
        }
    }
}

Funziona in Joomla! 3,2-3,6

(Per gli interessati) Ho dovuto rimuovere anche questo:

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

2
Grande! Mi ci sono voluti 5 minuti per creare il mio plug-in "rimuovi jquery e boostrap" grazie a te.
Alexandre Paulo,

16

Un trucco alternativo che mi piace sempre lanciare, dal momento che non comporta la modifica di file core è quello di sovrascrivere il file CSS con un file CSS vuoto nel modello. Ciò comporterà comunque una chiamata al tuo server per caricare la risorsa, ma non dovrai avere uno stile bootstrap.

Basta aggiungere un file vuoto qui: templates/YOUR_TEMPLATE/css/jui/bootstrap.min.csse templates/YOUR_TEMPLATE/js/jui/bootstrap.min.js.

Ovviamente qualsiasi impostazione del componente per utilizzare bootstrap sembrerà non modificata e ci sarà comunque una chiamata per caricare i file css e js dal browser. Tuttavia, i file saranno vuoti (dimensioni di download ridotte) e non avranno alcun impatto sullo stile.


Non ci ho mai pensato in questo modo, fantastico !!!
Mohd Abdul Mujib,

7

Solo un'idea (non testata), ma che ne dici di costruire un piccolo plugin che disinserisca Bootstrap?

Qualcosa come questo:

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

Se non stai cercando di creare il tuo plugin, una soluzione semplice sarebbe provare:

Disinserito nel modello

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

Tuttavia, alcune estensioni inseriscono ancora js o css anche se lo rimuovi. Il modo più affidabile che ho scoperto è con:

JCC - Plugin di controllo CSS JS

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

Tuttavia, a volte avrai ancora js inline ancora inserito nel tuo template, quindi a volte dovrai fare preg_replace per js inline.


4

Questo è qualcosa che mi ha infastidito dall'inizio di Joomla 3.x e ancora oggi non è stato fatto nulla per dare all'utente la possibilità di impedire il caricamento dei file bootstrap.

Sfortunatamente, Bootstrap viene caricato dal core di Joomla e questo è dovuto ad alcune funzionalità di base che richiedono che funzioni, quindi rimuoverlo completamente impedirà il funzionamento di alcune funzionalità come la descrizione comandi.

L'unico modo per rimuoverlo (che conosco) è tramite un hack di base nel seguente file: ( non raccomandato )

librerie \ CMS \ html \ bootstrap.php

L'unico altro modo a cui riesco a pensare è creare un override di modello per ogni modulo, componente e plugin che chiama la libreria bootstrap e rimuoverlo.

Nessuno dei due metodi è carino, tuttavia Joomla 3.x è stato creato su Bootstrap, quindi dobbiamo conviverci


1
Grazie Lodder. Sembra un po 'miope che non hanno un pulsante di spegnimento. Speriamo che lo aggiungano a Joomla 3.4 :)
TryHarder,

Non dovresti avere file core. Periodo. Esistono molti altri modi per rimuovere tutte le tracce di Bootstrap, senza hackerare i file core e tutti sono preferibili. Tutti sopravviveranno anche a un aggiornamento di Joomla, che non si può dire dei file core compromessi.
Seth Warburton,

@seth, sì, ora ci sono altri modi. Questa risposta è stata scritta 9 mesi fa e all'epoca non conoscevo altro modo
Lodder

@Valentin Despa, potresti per favore cancellare questa risposta per me come non posso?
Lodder

@oooooo - Ho richiesto di rimuovere il flag "accettato" dalla mia risposta in quanto non è la soluzione qui. Se non sono in grado di farlo, ti dispiacerebbe contrassegnare la risposta di qualcun altro come "accettata" per favore?
Lodder

3

Ci sono due modi:

  1. Disattiva i file inclusi all'interno del tuo modello, quindi crea una sostituzione per impedire a qualsiasi modulo o componente che potresti utilizzare di includerli di nuovo (non tanto lavoro quanto sembra).

    1. Usa uno dei numerosi plugin di sistema che possono farlo. Personalmente, consiglierei questo https://github.com/phproberto/plg_sys_mootable in quanto dà il pieno controllo su quando e dove rimuovere i file in modo che possa essere impostato per non interrompere la modifica del front-end (che se rimuovete tutto sarà rotto normalmente).

L'opzione 2 ha il vantaggio di essere facile da usare ma devi ancora convivere con il markup Bootstrap 2.x scadente che sporca il tuo sito. L'opzione 1 richiede un po 'più di lavoro ma significa che è possibile rimuovere ogni traccia di Bootstrap; sempre la mia opzione preferita. Vedi http://joomlafuture.com/ per il codice di esempio.


2

Joomla non carica automaticamente bootstrap CSS, ma carica JS. Se il tuo modello utilizza il metodo standard per caricare la testa di Joomla:

<jdoc:include type="head" />

Caricherà i file mootools, jquery e bootstrap in questo ordine:

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

Non carica i file CSS. Puoi testarlo rimuovendo la linea dal tuo file modello, quindi controllando quali file head mancano.

Il CSS bootstrap viene caricato dal tuo modello. Joomla (dal 2.5 credo) includesse Bootstrap 2.x nei loro file multimediali per un facile accesso. Protostar per qualche motivo non chiama bootstrap dai file multimediali. Invece, hanno copiato e incollato l'intero CSS bootstrap nel loro file template.css. Altri framework chiamano Bootstrap. Warp 7, ad esempio, ha una casella di controllo per abilitare o disabilitare Bootstrap.

Poiché frontend e backend hanno modelli diversi, Bootstrap può essere caricato o disabilitato per uno e non per l'altro. Non vi è alcuna dipendenza se si desidera disabilitare Bootstrap dal frontend e non dal backend.

La mia preferenza è Bootstrap 3, quindi su diversi modelli personalizzati ho scaricato e incluso il bootstrap 3 css nella mia testa del modello dopo la linea di testa di joomla e all'interno dei miei tag di testa del modello:

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

Il metodo è leggermente diverso per framework come Warp 7. Puoi anche caricare direttamente dall'URL CDN bootstrap se preferisci.

Quindi Joomla non ti obbliga a utilizzare Bootstrap o qualsiasi versione di Bootstrap, almeno per il CSS. Se lo desideri, puoi utilizzare altri framework reattivi. È tutto fatto nel modello. Non c'è bisogno di hack o plugin.


1

Joomla 3.3 (minore di) si basa su Bootstrap 2.3 e non su Bootstrap 3.X

Volevo migrare alla nuova versione di Bootstrap e c'erano molte posizioni che ovviamente avrei dovuto cambiare in base alla mia idea. L'ho fatto ma ultimamente.

In molte posizioni di codice ho dovuto disabilitare Bootstrap come sotto il codice:

// Aggiungi i framework JavaScript JHtml :: _ ('bootstrap.framework');

e creato un nuovo modello completamente Joomla per farlo; ma se vuoi migrare verso un altro framework dell'interfaccia utente, penso che tu debba continuare anche questo processo e almeno hai più di 30 componenti, moduli, plugin e alcuni codici legacy di Joomla che devi sviluppare di nuovo. È semplice ma richiede molto tempo.

Nuova percezione 02 luglio 2015: basato sul metodo "unset" in Joomla che alcuni dei nostri amici menzionati in questo forum ho potuto disabilitare completamente la versione precedente di Bootstrap e Mootools o di qualsiasi altra libreria Javascript o file CSS. Mi dispiace prima di aver menzionato la cattiva soluzione. puoi leggere questo post per ottenere maggiori informazioni per disabilitare Bootstrap


Bella presa. Bootstrap 3 è un errore. Lo modificherò ora.
TryHarder,

-2

Oppure puoi usare un modello da Yootheme, impostarlo come predefinito, quindi nella configurazione del modello selezionare "non caricare bootstrap".


3
In pratica stai dicendo che 49 euro per rimuovere Bootstrap è anche un'opzione?
Lodder
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.