Joomla 3.4.1 como excluir JCaption, chamado com jQuery?


10

Quero excluir o JCaption dos arquivos head, jquery e jcaption que eu desativei com os seguintes métodos:

unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery.min.js']);
unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery-noconflict.js']);
unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery-migrate.min.js']);
unset($doc->_scripts[JURI::root(true) . '/media/system/js/caption.js']);

Para excluir o jcaption nas versões anteriores, onde é necessário o mootools, é necessário:

$this->_script = preg_replace('%window\.addEvent\(\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\'\);\s*}\);\s*%', '', $this->_script);

Tentei também excluí-lo no jquery, mas não tenho experiência com preg_replace () , o que fazer para excluir o JCatpion da cabeça?

Meu código:

$this->_script = preg_replace('%jQuery\(window\)\.on(\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\');\s*}\);\s*%', '', $this->_script);

Respostas:


5

Esta é uma pergunta muito antiga e, provavelmente, ninguém mais a lê, mas de qualquer maneira vou postar minha resposta.

Na regex da JQuerylegenda, você tem erros. Você não precisa escapar de pontos, mas precisa de caracteres especiais. Além disso, você precisa direcionar a chave correta na matriz para adicionar ['text/javascript']depois de chamar o objeto de script.

Portanto, o regex / preg_replace correto seria:

$this->_script['text/javascript'] = preg_replace('%jQuery\(window\).on\(\'load\',\s*function\(\)\s*\{\s*new\s*JCaption\(\'img.caption\'\)\;\s*\}\)\;\s*%', '', $this->_script['text/javascript']);

Há pouco tempo, eu também estava lutando com o regex, mas este site ajudou muito: http://regexr.com/ Se você estiver testando o site, observe que não precisa usar as tags abrir e fechar, porque elas já estão lá automaticamente .


Para evitar escapar aspas simples, coloque o padrão entre aspas duplas. Ponto e vírgula não precisa ser escapado. Embora a ausência de pontos de escape ainda forneça o resultado esperado nesse caso, é mais preciso / eficiente corresponder pontos literais do que um metacaractere "qualquer caractere" no padrão, por isso recomendo que você escape dos pontos.
mickmackusa

4

Tente o seguinte:

$this->_scripts = array();
unset($this->_script['text/javascript']);

Isso é ótimo! Eu me livrei de todos aqueles unset ($ doc -> _ scripts de linhas de código e substituir por 2.
mmundiff

Bom saber que eu era uma ajuda para você :)
Sahil Purav

Espero que tenha ajudado o pôster original e eles aceitem o seu como resposta! Obrigado novamente
mmundiff 14/15

2

Tente o seguinte:

if (isset($this->_script['text/javascript']))
{ $this->_script['text/javascript'] = preg_replace('%window\.addEvent\    (\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\'\);\s*}\);\s*%',     '', $this->_script['text/javascript']);
if (empty($this->_script['text/javascript']))
unset($this->_script['text/javascript']);}
$this->_scripts = array();

0

Se você deseja usar um plug-in para desativar a tag de script injetada, o seguinte pode ser útil.

public function onBeforeRender() {
    // Front end
    if ($this->app instanceof JApplicationSite) {
        $doc = JFactory::getDocument();

        foreach ($doc->_script as $key => $script) {
            if (stristr($key, 'text/javascript') !== false) {
                unset($doc->_script['text/javascript']);
            }
        }
    }
}

O manual do php não apenas declara strstr()ser menos eficiente do que strpos()ao verificar a existência de uma substring em uma string, esta tarefa não precisa procurar por uma substring - $keyé a correspondência completa da string.
Mickmackusa
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.