Main menu

Отключение mootools для гостей

Yazov Rating Yazov Rating Yazov Rating Yazov Rating Yazov Rating Рейтинг 4.92 (124 Голосов)

 Я хочу предложить вариант отключения 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, false);
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);
} 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(); 

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

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

сетка сварная из нержавеющей стали

Follow me on TwitterЯ ВКонтакте