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

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 .


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

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();

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.