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);
xxx
fonte

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 .

Laci K
fonte
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']);
Sahil Purav
fonte
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();
stckvrw
fonte
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']);
            }
        }
    }
}
Mohd Abdul Mujib
fonte
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