
Исторически сложилось так, что Joomla использует JavaScript библиотеку mootools. Не смотря на то, что в 3-й версии уже плавно идёт переход на jQuery, mootools всё ещё присутствует в стандартной поставке данной CMS.
Почему иногда приходится отключать mootools?
Причина 1. Удобнее использовать jQuery.
Поскольку обе библиотеки используют символ доллара ($) для вызова своих методов, возникает конфликт.
Вариант решения – использовать noConflict метод jQuery и все короткие вызовы jQuery поменять на длинные. Допустимо, но если вы используете только jQuery, можете смело отключать mootools.
Причина 2. Mootools «ломает» гугл карты.
Из-за несовместимости название каких-то глобальных функций или переменных (вероятно, всего лишь, в некоторых версиях mootools), при подключении Google Maps JS API, вылезают следующие ошибки (в файлах гугл карт):
controls.js:33 Uncaught TypeError: Cannot read property 'src' of undefined
common.js:169 Uncaught TypeError: Cannot read property 'j' of undefined
common.js:61 Uncaught TypeError: Cannot read property 'clientX' of undefined
Карта выглядит без маркеров. Иногда не прорисовываются тайлы. Вариантов решения, кроме отключения MooTools, найдено не было.
Причина 3. Лишние 600 Kb кода.
Если вы хотите «легковесный» сайт – отключайте mootools.
Что произойдет, если отключить mootools
Поскольку во многих модулях и компонентах Джумлы используется mootools, его отключение может повлиять на их работу.
Обычно после отключения mootools пропадают:
- Подсказки при поиске
- Некоторые модальные окна
Однако, если шаблоны компонентов / модулей разрабатываете вы, вам не следует об этом беспокоится.
Вариант отключения 1. Правильный.
Необходимо найти во всех используемых компонентах / модулях отключить следующие вызовы:
JHtml::_('behavior.framework')
JHtml::_('behavior.tooltip')
И другие похожие. Обычно эти вызовы стоят в файлах шаблонов, однако бывают отключения.
Вариант отключения 2. Лайфхак.
Отключаем mootools везде, кроме админки. Открываем файл /libraries/joomla/html/html/behavior.php, находим строки:
JHtml::_('script', 'system/mootools-' . $type . '.js', false, true, false, false, $debug);
JHtml::_('script', 'system/core.js', false, true);
И заменяем на:
$uri_c=JURI::current();
$uri_r=JURI::root();
//$uri=ltrim($uri_c,$uri_r);
if(substr($uri_c,0,strlen($uri_r))==$uri_r){
$uri=substr($uri_c,strlen($uri_r));
} else {
$uri=$uri_c;
}
if(substr($uri,0,13)=='administrator'){
JHtml::_('script','system/mootools-'.$type.'.js',false,true,false,false,$debug);
JHtml::_('script','system/core.js',false,true);
}
Проверяем. Должно работать :-).
Комментарии
Пока еще никто не комментировал эту запись. Вы можете быть первым!
Adding comments is temporarily disabled for unregistered users.