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 and close", оскільки його вже є автоматично .


Щоб уникнути одинарних лапок, загортайте візерунок у подвійні лапки. Точки з комою не потрібно уникати. Незважаючи на те, що точки не втечуть, все-таки принесуть очікуваний результат у цьому випадку, точніше / ефективніше відповідати буквальним крапкам, а не метахарактеру «будь-якого символу» у шаблоні, тому я рекомендую уникати крапок.
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();

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.