В продолжение темы отключения Mootools в шаблоне сайта на Joomla 2.5

Прочитав способ отключения  Yazov отключения Mootools на уровне фреймворка Joomla, и немного поразмыслив пришел к выводу, что в моем подходе к отключению JavaScript на уровне шаблона я не правильно сформулировал условия при которых вывод яваскриптов mootools должен выводится. Ошибочно предположив что они нам могут понадобится только при создании или редактировании материалов компанента com_content. На самом деле вариантов когда нужно использования Mootools намного больше, во первых это возможность использования сторонних компонентов использующих для своей работы данные JS библиотеки, во вторых различные модулили и плагины которые так же могут требовать для своей работы данные библиотеки.

По этому я считаю правильнее пойти от обратного, нужно выбрать варианты когда лишние JS на странице действительно не нужны. Это решит проблему со сторонними компанентами и частично с выводом модулей. Когда нам не нужны на странице лишние яваскрипты? Во первых это посещение сайта роботами, но к сожалению cверять $_SERVER["HTTP_USER_AGENT"] с списком имен всех существующих роботов накладно в плане процессорного времени, по этому это случай расматривать не буду. Во вотрых это страницы компонента com_content в режиме просмотра материала. Кто то захочет так же отключть их вывод на странцах вывода категорий.

$view = JRequest::getVar('view', null, 'get', 'word');
 $option= JRequest::getVar('option', null, 'get', 'word');
if (($option=='com_content')and(($view=='category')or($view=='article'))) {
    //выполняем код по ограничению вывода mootools
    if (isset($this->_scripts)and(count($this->_scripts))){
        foreach ($this->_scripts as $key => $value) {
            if (preg_match("/media\/system\/js/i", $key)) {
                unset ($this->_scripts[$key]);
            }
        }
    }
    //вырезаем строку  window.addEvent('load', function() { new JCaption('img.caption');    });
    if (isset($this->_script)and(count($this->_script))){
        preg_match("/window\.addEvent\('load',\sfunction\(\)\s\{[\s]*new\sJCaption\('img\.caption'\);[\s]*\}\);/iU", $this->_script['text/javascript'],$match);
        if (isset($match[0])) {
            $this->_script['text/javascript']=str_replace($match[0],'',$this->_script['text/javascript']);
        }
        //вырезаем тултип
        preg_match("/window\.addEvent\('domready',\sfunction\(\)\s\{[\s]*[$]+\('\.hasTip'\)\.each\(function\(el\)\s\{[\s]*var\stitle\s=\sel\.get\('title'\);[\s]*if\s\(title\)\s\{[\s]*var\sparts\s=\stitle\.split\('::', 2\);[\s]*el\.store\('tip:title',\sparts\[0\]\);[\s]*el\.store\('tip:text',\sparts\[1\]\);[\s]*\}[\s]*\}\);[\s]*var\sJTooltips\s=\snew\sTips\([$]+\('\.hasTip'\),\s\{\smaxTitleChars:\s50,\sfixed:\sfalse\}\);[\s]*\}\);/iU", $this->_script['text/javascript'],$match2);
        if (isset($match2[0])) {
            $this->_script['text/javascript']=str_replace($match2[0],'',$this->_script['text/javascript']);
        }
    }
}

Данный код вставляется в index.php вашего шаблона после

<code>defined('_JEXEC') or die;</code>

Если список страниц сайта на которых не нужно использования Mootools нужно расширить  то нужно просто добавить необходимые условия в условный опратор if. По моему разумению, это именно те страници где нужна хорошая скорость загрузки материала.

P.S. просмотрите код вашего шаблона на наличие в нем вызова функции JHtml::_('behavior.framework', true); и ему подобных. Проанализируйте, с какой целью авторы данного шаблона делают вызов JS библиотек, если поймете что это лишнее, то закоментируйте их. Иначе все будет напрасно, так как их подключение произойдет пойзже, нашей очистки обекта шаблона от данных скриптов. Будьте внимательны.

Благодарю за внимание!

 

0 комментариев
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.