Pergunta

Atualizei recentemente do Joomla 3.2.1 para o Joomla 3.2.2.

No Joomla 3.2.1, desativei manualmente a inclusão do jQuery:

$doc = JFactory::getDocument();

$dontInclude = array(
'/media/jui/js/jquery.js',
'/media/jui/js/jquery.min.js',
'/media/jui/js/jquery-noconflict.js',
'/media/jui/js/jquery-migrate.js',
'/media/jui/js/jquery-migrate.min.js',
'/media/jui/js/bootstrap.js',
'/media/system/js/core-uncompressed.js',
'/media/system/js/tabs-state.js',
'/media/system/js/core.js',
'/media/system/js/mootools-core.js',
'/media/system/js/mootools-core-uncompressed.js',
);
foreach($doc->_scripts as $key => $script){
    if(in_array($key, $dontInclude)){
        unset($doc->_scripts[$key]);
    }
}

Mas isso não está funcionando no Joomla 3.2.2.Existe uma maneira de não incluir o jQuery do Joomla no 3.2.2?

Foi útil?

Solução 3

Eu já adicionei:

            $doNotInclude = array(
                'jquery',
                'bootstrap',
                'behavior',
            );
            if(in_array($file, $doNotInclude)){
                return;
            }

imediatamente depois:

            list($key, $prefix, $file, $func) = static::extract($key); 

em bibliotecas/cms/html/html.php, na função "_".

Não gosto disso, pois é uma modificação do núcleo do Joomla, mas funciona.Ainda estou procurando uma solução melhor.

Outras dicas

Outra variação que funciona bem para mim com o Joomla 3.4 é editar o arquivo template > index.php com algo como:

$doc = JFactory::getDocument();

$headData = $doc->getHeadData();
$scripts = $headData['scripts'];

//scripts to remove, customise as required

unset($scripts[JUri::root(true) . '/media/system/js/mootools-core.js']);
unset($scripts[JUri::root(true) . '/media/system/js/mootools-more.js']);
unset($scripts[JUri::root(true) . '/media/system/js/core.js']);
unset($scripts[JUri::root(true) . '/media/system/js/modal.js']);
unset($scripts[JUri::root(true) . '/media/system/js/caption.js']);
unset($scripts[JUri::root(true) . '/media/jui/js/jquery.min.js']);
unset($scripts[JUri::root(true) . '/media/jui/js/jquery-noconflict.js']);
unset($scripts[JUri::root(true) . '/media/jui/js/bootstrap.min.js']);
unset($scripts[JUri::root(true) . '/media/jui/js/jquery-migrate.min.js']);

$headData['scripts'] = $scripts;
$doc->setHeadData($headData);

Você precisa adicionar um prefixo de JUri::root(true) antes de cada um desses nomes de arquivo - caminhos relativos não funcionarão

Você também pode tentar algo assim:

$removeScripts = [
    '/media/jui/js/jquery.min.js',
    '/media/jui/js/jquery-noconflict.js',
    '/media/jui/js/jquery-migrate.min.js',
    '/media/system/js/caption.js',
];
foreach ($removeScripts as $removeScript) {
    unset($this->_scripts[JURI::root(true).$removeScript]);
}

O problema é com o seu in_array.

Se você removê-lo alterando isto:

foreach($doc->_scripts as $key => $script){
    if(in_array($key, $dontInclude)){
        unset($doc->_scripts[$key]);
    }
}

para isso:

foreach($doc->_scripts as $key => $script){
    unset($doc->_scripts[$key]);
}

Então funciona bem.É inútil verificar se a chave do array existe, pois percebi que você não excluiu manualmente nenhum desses arquivos.

Espero que isto ajude

Joomla 3.3.6 carrega scripts de maneira diferente, então $doc->_scripts não retornará nada...então não há nada para desmarcar.

Eu recomendo usar este plugin: https://github.com/Poznakomlus/joomla_options

Ele permite remover bootstrap, jQuery e mootools (você pode escolher o que desabilitar).

Isenção de responsabilidade:Não sou afiliado de forma alguma ao desenvolvedor do plugin ou ao próprio plugin.

Se você estiver escrevendo um modelo personalizado ou um componente, onde você precisa remover todos os scripts carregados por padrão dentro do Joomla, você pode criar um plugin simples e vincular a execução ao onBeforeCompileHead evento.

Minha implementação foi como abaixo.É muito simples.Você pode brincar ainda mais com a lista de pesquisa, especificando os nomes dos arquivos ou simplesmente colocando a pasta pai na lista negra.

protected $app;
public function onBeforeCompileHead() {
    // Front end
    if ($this->app instanceof JApplicationSite) {
        $doc = JFactory::getDocument();
        $search = array(
            'jui/js/',
            'system/js/'
        );
        foreach ($doc->_scripts as $key => $script) {
            foreach ($search as $findme) {
                if (stristr($key, $findme) !== false) {
                    unset($doc->_scripts[$key]);
                }
            }
        }
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top