Como posso remover completamente o Bootstrap da interface do Joomla?

14

Recentemente, tentei remover todas as instâncias do Bootstrap do front end do Joomla para fins de depuração. Eu estava usando um modelo de esqueleto com uma instalação relativamente nova do Joomla 3.3. Removai todas as inclusões do Bootstrap do modelo e desliguei todos os plugins e módulos que pensei que poderiam estar carregando. Eu também limpei o cache do Joomla. Apesar disso, o firebug me disse que o Joomla ainda estava tentando carregar o bootstrap.min.js em /media/jui/js/bootstrap.min.js

Eu resolvi o problema renomeando temporariamente o arquivo de inicialização, mas isso me fez pensar.

  • Isso acontece com todas as instalações do Joomla 3.3 ou é apenas meu?
  • Existe uma maneira de identificar de onde o bootstrap está sendo carregado?
  • Existe uma maneira de desativar o carregamento do bootstrap?
TryHarder
fonte

Respostas:

15

Isso acontece com todas as instalações do Joomla 3.3 ou é apenas meu?

Na versão: 3.2-3.7 (eu testei).

Existe uma maneira de desativar o carregamento do bootstrap?

Sim existe. Apenas remova-o antes de criar o cabeçalho, usando o evento onBeforeCompileHead ( Mais informações nos documentos. ).

Em vista da possibilidade de anexar a biblioteca a qualquer momento por várias extensões. Não é suficiente remover do modelo e dos módulos algumas linhas. Esta não é a solução perfeita. Mas você pode ter certeza de que ele não será carregado.

No meu projeto, estou usando o bootstrap 3.2. Passei o dia inteiro para encontrar uma maneira de remover o bootstrap 2.

A única solução foi remover o script antes de criar o cabeçalho.

Minha solução é criar um 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']);
        }
    }
}

Funciona no Joomla! 3,2-3,6

(Para interessado) eu também precisava remover isso:

    unset($doc->_scripts[JURI::root(true).'/media/system/js/frontediting.js']);
    unset($doc->_scripts[JURI::root(true).'/media/system/js/html5fallback.js']);
Jacek Labuda
fonte
2
Ótimo! Levei 5 minutos para criar meu próprio plugin "remove jquery and boostrap" graças a você.
Alexandre Paulo
16

Um truque alternativo que eu sempre gosto de jogar fora, já que não envolve a edição de arquivos principais, é substituir o arquivo css por um arquivo css em branco no seu modelo. Isso ainda levará uma chamada ao servidor para carregar o recurso, mas você não precisará ter nenhum estilo de inicialização.

Basta adicionar um arquivo vazio aqui: templates/YOUR_TEMPLATE/css/jui/bootstrap.min.csse templates/YOUR_TEMPLATE/js/jui/bootstrap.min.js.

Naturalmente, qualquer configuração de componente para usar o bootstrap parecerá sem estilo e ainda haverá uma chamada para carregar os arquivos css e js pelo navegador. No entanto, os arquivos estarão vazios (tamanho pequeno de download) e não terão impacto no estilo.

David Fritsch
fonte
Nunca pensei nisso dessa maneira, legal !!!
Mohd Abdul Mujib
7

Apenas uma idéia (não testada), mas que tal criar um pequeno plugin que desative o Bootstrap?

Algo assim:

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

Se você não está pensando em criar seu próprio plugin, uma solução simples seria tentar:

Desativar no modelo

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

No entanto - algumas extensões ainda inserem o js ou o css, mesmo que você o remova. A maneira mais confiável que eu descobri é com:

JCC - Plug-in de controle JS CSS

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

No entanto, às vezes você ainda terá js inline ainda inserido em seu modelo. Então, às vezes, você precisará fazer preg_replace para os js inline.

iamrobert
fonte
4

Isso é algo que me incomoda desde o início do Joomla 3.xe até hoje, nada foi feito para dar ao usuário a opção de impedir que os arquivos de inicialização sejam carregados.

Infelizmente, o Bootstrap é carregado a partir do núcleo do Joomla e isso se deve a alguns recursos principais que exigem que ele funcione, removendo-o completamente, impedirá que alguns recursos funcionem, como a dica de ferramenta.

A única maneira de removê-lo (que eu sei) é através de um hack principal no seguinte arquivo: ( não recomendado )

bibliotecas \ cms \ html \ bootstrap.php

A única outra maneira em que consigo pensar é criar uma substituição de modelo para cada módulo, componente e plug-in que chama a biblioteca de inicialização e a remove.

Nenhum dos métodos é bom, no entanto, o Joomla 3.x foi construído no Bootstrap, por isso temos que conviver com ele.

Lodder
fonte
1
Obrigado Lodder. Parece um pouco míope que eles não têm um botão de desligar. Espero que eles o adicionem ao Joomla 3.4 :)
TryHarder 27/10
Você não deve ter arquivos principais. Período. Existem muitas outras maneiras de remover todos os vestígios do Bootstrap, sem invadir os arquivos principais e todos eles são preferíveis. Todos eles também sobreviverão a uma atualização do Joomla, o que não se pode dizer dos arquivos principais hackeados.
Seth Warburton
@ seth, sim, agora existem outras maneiras. Essa resposta foi escrita 9 meses atrás e, na época, eu não conheço nenhuma outra maneira
Lodder
@Valentin Despa, você poderia excluir esta resposta para mim, pois não posso?
Lodder
@oooooo - solicitei que o sinalizador "aceito" fosse removido da minha resposta, pois não é a solução aqui. Se eles não puderem fazer isso, você se importaria de marcar a resposta de outra pessoa como "aceita", por favor?
Lodder
3

Existem duas maneiras:

  1. Descompacte os arquivos incluídos no seu modelo e crie uma substituição para impedir que qualquer módulo ou componente que você possa estar usando os inclua novamente (não é tanto trabalho quanto parece).

    1. Use qualquer um dos inúmeros plugins do sistema que podem fazer isso. Pessoalmente, eu recomendo este https://github.com/phproberto/plg_sys_mootable , pois fornece controle total sobre quando e onde remover arquivos, para que possa ser configurado para não interromper a edição de front-end, por exemplo (e se você remover tudo será quebrado normalmente).

A opção 2 tem a vantagem da facilidade de uso, mas você ainda precisa conviver com a marcação inicial do Bootstrap 2.x que espalha o site. A opção 1 exige um pouco mais de trabalho, mas significa que você pode remover todos os rastreios do Bootstrap; sempre minha opção preferida. Veja http://joomlafuture.com/ para obter um código de exemplo.

Seth Warburton
fonte
2

O Joomla não carrega o CSS de auto-inicialização automaticamente, mas carrega o JS. Se o seu modelo usa o método padrão para carregar a cabeça do Joomla:

<jdoc:include type="head" />

Carregará arquivos mootools, jquery e bootstrap nesta ordem:

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

Não carrega arquivos CSS. Você pode testá-lo removendo a linha do arquivo de modelo e verificando quais arquivos principais estão faltando.

O CSS de autoinicialização é carregado pelo seu modelo. O Joomla (desde o 2.5 acredito) incluiu o Bootstrap 2.x em seus arquivos de mídia para facilitar o acesso. Por algum motivo, o Protostar não chama bootstrap dos arquivos de mídia. Em vez disso, eles copiaram e colaram todo o CSS de inicialização no arquivo template.css. Outras estruturas chamam o Bootstrap. O Warp 7, por exemplo, possui uma caixa de seleção para ativar ou desativar o Bootstrap.

Como o front-end e o back-end possuem modelos diferentes, o Bootstrap pode ser carregado ou desativado para um e não para o outro. Não há dependência se você deseja desativar o Bootstrap no front-end e não no back-end.

Minha preferência é o Bootstrap 3, portanto, em vários modelos personalizados diferentes, baixei e incluí o CSS do bootstrap 3 no cabeçalho do meu modelo após a linha do cabeçalho do joomla e nas tags do cabeçalho do meu modelo:

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

O método é um pouco diferente para estruturas como o Warp 7. Você também pode carregar diretamente do URL da CDN de inicialização, se preferir.

Portanto, o Joomla não o força a usar o Bootstrap ou qualquer versão do Bootstrap, pelo menos para o CSS. Você pode usar outras estruturas responsivas, se quiser. Tudo é feito no modelo. Não há necessidade de hacks ou plugins.

Quinn
fonte
1

O Joomla 3.3 (menor que) é baseado no Bootstrap 2.3 e não no Bootstrap 3.X

Eu queria migrar para o novo lançamento do Bootstrap, e houve muitas posições que eu mudei de curso com base na minha ideia. Eu fiz isso, mas muito recentemente.

Em muitas posições de código, tive que desativar o Bootstrap, como abaixo:

// Adicione JavaScript Frameworks JHtml :: _ ('bootstrap.framework');

e criou um novo modelo completamente Joomla para fazer isso; mas se você quiser migrar para outra estrutura de interface do usuário, acho que também precisará continuar com esse processo e pelo menos terá mais de 30 componentes, módulos, plug-ins e alguns códigos legados do Joomla que precisará desenvolver novamente. É simples, mas precisa de muito tempo.

Nova percepção 02 de julho de 2015: com base no método "unset" no Joomla, que alguns de nossos amigos mencionaram neste fórum, eu poderia desativar completamente a versão anterior do Bootstrap e Mootools ou qualquer outra biblioteca Javascript ou arquivo CSS. Sinto muito antes de mencionar uma solução ruim. você pode ler esta postagem para obter mais informações para desativar o Bootstrap

Sami
fonte
Boa pegada. O Bootstrap 3 é um erro. Vou editá-lo agora.
TryHarder 27/10/14
-2

Ou você pode usar um modelo do Yootheme, configurá-lo como padrão e, nessa configuração de modelo, selecione "não carregar o autoinicializador".

Jim Hill
fonte
3
Você está dizendo basicamente 49 euros para remover o Bootstrap também é uma opção?
Lodder