Отключение mootools - мой метод

С позволения продолжу тему, начатую пользователем Dron79 о том, как отключить mootools на уровне шаблонов. Я же хочу предложить вариант более грубый, на уровне ядра Joomla. И, хочу заметить, он глобальный. Подойдет он далеко не всем, Я думаю, однако тех, кто использует фреймворки, этот метод устроит, так как другие варианты работать не будут, если слово в слово выполнять инструкции с Joomlaforum или статьи, упомянутой выше.

Итак, Я хочу предложить неполное отключение mootools посетителям имеющих статус гость, т.е. для неавторизованных пользователей. Почему неполное? Потому что некоторые расширения для Joomla до сих пор используют mootools, но далеко не все, что грузит Joomla. Об этом немного подробнее…

Если целиком и полностью отключить mootools (хотя этот вариант мы тоже рассмотрим), то некоторые сторонние расширения работать не будут. А бывают немного глупые ситуации, например, установив расширение, использующее mootools мы получим головную боль и, возможно, много убитого впустую времени, так как в его описании не было указано, что ему необходим mootools. Однако часть скриптов нам все же не нужна (по крайней мере для гостей). Итак, отключим для гостей дополнения mootools, которые грузятся постоянно и нам не нужны:

Править мы будем файл /libraries/joomla/html/html/behavior.php, который отвечает за вызов всех js скриптов из дериктории media/system/js/.

Первый вариант частичного отключения mootools для гостей:

Находим строчки

 

JHtml::_('script', 'system/mootools-' . $type . '.js', false, true, false, false, $debug);
JHtml::_('script', 'system/core.js', false, true);
self::$loaded[__METHOD__][$type] = true;

И заменяем их на

 

$user =& JFactory::getUser();
if ($user->get('guest') == 1) {
JHtml::_('script', 'https://ajax.googleapis.com/ajax/libs/mootools/1.4.5/mootools-yui-compressed.js', false, true, false, false, $debug);
JHtml::_('script', 'system/core.js', false, false);
JHtml::_('script', 'system/mootools-more.js', false, false, false, false, $debug);
self::$loaded[__METHOD__][$type] = true;

}else {
JHtml::_('script', 'https://ajax.googleapis.com/ajax/libs/mootools/1.4.5/mootools-yui-compressed.js', false, true, false, false, $debug);
JHtml::_('script', 'system/core.js', false, true);
JHtml::_('script', 'system/mootools-more.js', false, true, false, false, $debug);
self::$loaded[__METHOD__][$type] = true;}

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

Чуть ниже находим

 

JHtml::_('script', 'system/caption.js', true, true);

И заменяем на

 

$user =& JFactory::getUser();
if ($user->get('guest') == 1) {
JHtml::_('script', 'system/caption.js', false, false); 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'] ); } 
} else {
JHtml::_('script', 'system/caption.js', true, true);
}

Опять запрещаем грузить дополнение гостям.

Чтобы было понятнее, мы сначала загрузили саму библиотеку mootools с серверов Google: https://ajax.googleapis.com/ajax/libs/mootools/1.4.5/mootools-yui-compressed.js. Эта версия, а не локальная, будет грузится всем и везде. И даже в административной части. Зачем это? Это поможет нам ускорить загрузку сайта в целом. Как известно гораздо быстрее скрипты загружаются со внешних источников, если они конечно имеют большую пропускную способность, а Google имеет, поверьте ;)

Затем мы для гостей отключили дополнения mootools. В итоге мы грузим только удаленную копию библиотеки mootools без лишних дополнений.

Второй вариант отключения mootools для гостей: нужно строки ниже:

 

JHtml::_('script', 'system/mootools-' . $type . '.js', false, true, false, false, $debug);
JHtml::_('script', 'system/core.js', false, true);
self::$loaded[__METHOD__][$type] = true;

Заменить на эти:

 

$user =& JFactory::getUser();
if ($user->get('guest') == 1) {
JHtml::_('script', 'system/mootools-' . $type . '.js', false, false, false, false, $debug);
JHtml::_('script', 'system/core.js', false, false);
self::$loaded[__METHOD__][$type] = true;
}else {
JHtml::_('script', 'system/mootools-' . $type . '.js', false, true, false, false, $debug);
JHtml::_('script', 'system/core.js', false, true);
self::$loaded[__METHOD__][$type] = true; }

Затем необходимо в шаблоне и всех расширениях вычищать:

 

JHtml::_('behavior.tooltip');
JHtml::core();

… и тому подобное, иначе мы получим неработоспособную страницу или весь сайт.

Вот и все. Чем плох этот метод? Тем, что после обновления движка все придется делать заново.

Благодарю пользователей wfedin и Shustry с Joomlaforum за помощь. Использовал так же материалы со своего сайта

4 комментария