Joomla 3.4.1 как удалить JCaption, вызываемый с помощью jQuery?

10

Я хочу удалить JCaption из файла head, jquery и jcaption, который я деактивировал следующими способами:

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

Чтобы удалить jcaption в предыдущих версиях, где используются mootools:

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

Я также попытался удалить его на jquery, но у меня нет опыта работы с preg_replace () , что нужно сделать, чтобы удалить JCatpion из головы?

Мой код:

$this->_script = preg_replace('%jQuery\(window\)\.on(\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\');\s*}\);\s*%', '', $this->_script);
ххх
источник

Ответы:

5

Это очень старый вопрос, и, вероятно, никто его больше не читает, но в любом случае я опубликую свой ответ.

В регулярном выражении для JQueryзаголовка у вас есть ошибки. Вам не нужно избегать точек, но вы должны избегать специальных символов. А также вам нужно указать правильный ключ в массиве, поэтому вам нужно добавить его ['text/javascript']после вызова объекта сценария.

Таким образом, правильное регулярное выражение / preg_replace будет:

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

Не так давно я также боролся с regex, но этот сайт очень помог: http://regexr.com/ Если вы пробуете сайт, обратите внимание, что вам не нужно использовать теги open и close, потому что он уже там автоматически ,

Laci K
источник
Чтобы избежать экранирования одинарных кавычек, заключите шаблон в двойные кавычки. Точки с запятой не нужно экранировать. Хотя не экранирование точек все равно даст ожидаемый результат в этом случае, более точно / эффективно сопоставлять буквенные точки, а не метасимвол «любой символ» в шаблоне, поэтому я рекомендую экранировать точки.
mickmackusa
4

Попробуй это:

$this->_scripts = array();
unset($this->_script['text/javascript']);
Сахил Пурав
источник
Это замечательно! Я избавился от всех этих неустановленных ($ doc -> _ скриптов строк кода и заменил на 2.
mmundiff
Приятно осознавать, что я помог тебе :)
Сахил Пурав,
Надеюсь, это помогло оригинальному постеру, и они приняли ваш ответ!
Еще
2

Попробуй это:

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
источник
0

Если вы хотите использовать плагин для отмены введенного тега скрипта, может быть полезно следующее.

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']);
            }
        }
    }
}
Мохд Абдул Муджиб
источник
Мало того, что руководство php объявляет, что strstr()оно менее эффективно, чем strpos()при проверке наличия подстроки в строке, эта задача не требует поиска подстроки - $keyэто полное совпадение строки.
mickmackusa