Общеизвестно, что в веб-разработке два человека совсем не обязательно используют одни и те же инструменты. Почему же фреймворк «Javascript» не может следовать этому правилу? Будь то jQuery, Prototype, YUI, Dojo, даже Twitter Bootstrap или что-то похожее, у всех нас должен быть выбор, когда дело касается инструментов для разработки.
Позвольте объяснить, почему я выбираю MooTools в качестве фреймворка, работая с Joomla! Такова необходимость. Необходимость не в MooTools, а в едином Javascript фреймворке, который официально внедрён в систему. Выгода огромна: разработка и ядра и расширений стандартизирована, что постоянно обеспечивает конечного пользователя «боевым» опытом сторонних разработчиков.
Лично мне очень нравится jQuery: Javascript фрейморк, с которым я познакомился несколько лет назад. Тогда я начал разрабатывать расширения для Joomla, и искал случай применить свои навыки работы с jQuery, не задумываясь о MooTools. В jQuery поддерживается режим «No Conflict», который позволяет работать одновременно с другими фреймворками. Однако могут возникнуть проблемы, потому что не все плагины jQuery написаны с поддержкой «No Conflict», и использование двух отдельных Javascript фреймворков может значительно снизить работоспособность сайта на слабых компьютерах и увеличить время загрузки сайта. В любом случае, я просто предпочитаю отключать Mootools, когда работаю.
К сожалению, отключение Mootools в Joomla – единственный выход для «свободных» разработчиков. Те, кто работает над созданием сторонних расширений, должны будут смириться с наличием MooTools или грузить свой Javascript фреймворк таким образом, чтобы можно было избежать конфликтов с библиотекой MooTools.
Отключение Mootools в Joomla - решение
Так как же отключить MooTools? Не получится просто удалить его из папки media/system/js – система все равно попытается найти этот файл, только вы получите ошибку запроса HTTP при каждой попытке загрузить станицу. Избавиться от MooTools не так просто, но к счастью это можно сделать с помощью плагина.
Создайте новый файл removemootools.php в каталоге /plugins/system и вставьте в него такой код (вам придется добавить плагин в базу данных):
class plgSystemRemoveMooTools extends JPlugin
{
public function onAfterDispatch()
{
$app = JFactory::getApplication();
if($app->isSite()) //Удаление MooTools только с фронтальной части сайта, не затрагивая панель администратора
{
$mootools = JURI::root(true).DS.'media'.DS.'system'.DS.'js'.DS.'mootools.js';
$document = JFactory::getDocument();
unset($document->_scripts[$mootools]);
}
}
}
Таким образом, мы избавились от фреймворка MooTools в Joomla, но есть много файлов MooTools, которые Joomla! подгружает автоматически. Их можно удалить, просто добавив функцию unset()
в плагин, который вы только что создали.
Как только вы подключите плагин, MooTools исчезнет с сайта совсем. И как ведет себя код? Для начала убедимся, что находимся в клиентском приложении Joomla! Удаление MooTools из панели настроек Joomla! может закрыть доступ к некоторым её пунктам.
MooTools больше нет на вашем сайте. Теперь вы сможете использовать любой фреймворк Javascript, не боясь вмешательства со стороны MooTools.
Примечание переводчика: В грядущей версии Joomla 3.0 можно будет выбирать между jQuery и Mootools - какой фреймворк будет использоваться по умолчанию. Команда разработчиков прислушалась к многочисленным просьбам и реализовала возможность выбора фрейморка, поскольку большая часть людей, создающих сторонние расширения, использует jQuery. Кроме того, в Joomla 3.0 будет реализован пользовательский интерфейс на базе Twitter Bootstrap.
Данная статья актуальна для Joomla 2.5, поскольку фреймворк Mootools включен в дистрибутив этой ветки принудительно, однако согласно графику цикла существования версий Joomla, версия 2.5 будет параллельно поддерживаться с развитием 3.0 вплоть до конца 2013 года. С учетом специфики рунета, не все будут торопиться обновлять свои сайты, откладывая вопрос "Остаться на 2.5 или перейти на Joomla 3.0?" в долгий ящик. Таким образом, техника отключения Mootools, рассмотренная в данной статье, будет актуальна ещё долгое время.