it-swarm.it

Come posso rimuovere completamente Bootstrap dal frontend di Joomla?

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 sono meravigliato.

  • Questo succede con tutte le installazioni di Joomla 3.3 o è solo mia?
  • Esiste un modo per identificare da dove viene caricato bootstrap?
  • C'è un modo in cui posso disabilitare bootstrap dal caricamento?
14
TryHarder

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

Nella versione: 3.2-3.7 (ho testato).

C'è un modo in cui posso disabilitare bootstrap dal caricamento?

Si C'è. Basta rimuoverlo prima di creare l'intestazione, utilizzando l'evento onBeforeCompileHead ( lteriori informazioni nei documenti. ).

Vista la possibilità di allegare la libreria 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']);
15
Jacek Labuda

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.

Aggiungi un file vuoto qui: templates/YOUR_TEMPLATE/css/jui/bootstrap.min.css e templates/YOUR_TEMPLATE/js/jui/bootstrap.min.js.

Ovviamente qualsiasi impostazione del componente da utilizzare bootstrap apparirà non stilato 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 hanno alcun impatto sulla progettazione.

15
David Fritsch

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);
}
7
johanpw

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
iamrobert

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

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 è bello, tuttavia Joomla 3.x è stato creato su Bootstrap, quindi dobbiamo convivere con esso

4
Lodder

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, raccomanderei questo https://github.com/phproberto/plg_sys_mootable dato che 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 per esempio (che se rimuovi tutto sarà rotto normalmente).

L'opzione 2 ha il vantaggio della facilità d'uso, ma devi comunque convivere con crummy Bootstrap 2.x markup che sporca il tuo sito. L'opzione 1 richiede un po 'più di lavoro ma significa che puoi rimuovere ogni traccia di Bootstrap; sempre la mia opzione preferita. Vedi http://joomlafuture.com/ per esempio codice.

3
Seth Warburton

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

<jdoc:include type="head" />

Caricherà 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 bootstrap CSS è caricato dal tuo modello. Joomla (dal 2.5 credo) incluso Bootstrap 2.x nei loro file multimediali per un facile accesso. Protostar per alcuni il motivo non chiama bootstrap dai file multimediali. Invece, hanno copiato e incollato l'intero bootstrap CSS 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 l'uno e non l'altro. Non c'è dipendenza se si desidera disabilitare Bootstrap dal frontend e non dal backend.

La mia preferenza è Bootstrap 3, quindi su diversi modelli personalizzati diversi, ho scaricato e incluso il bootstrap 3 css nella mia testa del modello dopo la linea di testa di joomla e nei tag head del mio 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 CDN, se preferisci.

Quindi Joomla non ti obbliga a usare Bootstrap o qualsiasi versione di Bootstrap, almeno per il CSS. Puoi usare altri framework reattivi se vuoi. È tutto fatto nel template. Non c'è bisogno di hack o plugin.

2
Quinn

Joomla 3.3 (minore di) si basa su Bootstrap 2.3 non 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 molto recentemente.

In molte posizioni del 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 qualsiasi altra libreria Javascript o file CSS Mi dispiace prima di aver menzionato una cattiva soluzione. Puoi leggere questo post per ottenere maggiori informazioni per disabilitare Bootstrap

1
Sami