Joomla 3.4.1 jak usunąć JCaption, wywołany przez jQuery?

10

Chcę usunąć JCaption z pliku head, jquery i jcaption, który dezaktywowałem następującymi metodami:

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

Aby usunąć jcaption z poprzednich wersji, w których potrzebne są mootools:

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

Próbowałem też usunąć go z jquery, ale nie mam doświadczenia z preg_replace () , co zrobić, aby usunąć JCatpion z głowy?

Mój kod:

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

Odpowiedzi:

5

To bardzo stare pytanie i prawdopodobnie nikt już go nie czyta, ale i tak opublikuję swoją odpowiedź.

W wyrażeniu regularnym JQuerypodpisu masz błędy. Nie musisz uciec przed kropkami, ale musisz uciec od znaków specjalnych. Musisz także wybrać właściwy klucz w tablicy, aby dodać go ['text/javascript']po wywołaniu obiektu skryptu.

Zatem poprawnym wyrażeniem regularnym / preg_replace byłoby:

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

Nie tak dawno też miałem problemy z regex, ale ta strona bardzo pomogła: http://regexr.com/ Jeśli wypróbowujesz stronę, zauważ, że nie musisz używać tagów otwierania i zamykania, ponieważ są już tam automatycznie .

Laci K
źródło
Aby uniknąć unikania pojedynczych cudzysłowów, zawiń wzór w podwójne cudzysłowy. Średniki nie wymagają ucieczki. Chociaż nie ucieczka kropek nadal zapewnia oczekiwany wynik w tym przypadku, bardziej dokładne / wydajne jest dopasowanie dosłownych kropek niż metaznak „dowolnego znaku” we wzorcu, więc zalecam ucieczkę kropek.
mickmackusa
4

Spróbuj tego:

$this->_scripts = array();
unset($this->_script['text/javascript']);
Sahil Purav
źródło
To jest świetne! Pozbyłem się tych wszystkich nieustawionych ($ doc -> _ skryptów wiersze kodu i zamieniam na 2.
mmundiff 14.09.15
Dobrze wiedzieć, że ci
pomogłem
Mam nadzieję, że pomogło to oryginalnemu plakatowi i zaakceptowali twój jako odpowiedź!
Jeszcze
2

Spróbuj tego:

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
źródło
0

Jeśli chcesz użyć wtyczki, aby rozbroić wstrzyknięty tag skryptu, poniższe informacje mogą być przydatne.

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
źródło
Podręcznik php nie tylko deklaruje, że strstr()jest mniej wydajny niż strpos()podczas sprawdzania istnienia podłańcucha w łańcuchu, to zadanie nie musi wyszukiwać podłańcucha - $keyjest to pełne dopasowanie łańcucha.
mickmackusa