Joomla: удалить hasTooltip и ненужные js

Default Image Микроблог

Удаление лишних JavaScript-файлов и отключение функции hasTooltip из раздела <head> в движке Joomla 3.0 и выше — распространённая задача. Это необходимо для облегчения веб-страницы, что положительно влияет на скорость загрузки сайта и благотворно сказывается на оценке сайта поисковыми системами.

1. Отключение hasTooltip

hasTooltip — это внутренняя функция Joomla, путь к которой в файловой системе:
/libraries/cms/html/bootstrap.php.

Инициализация (посадка) tooltip происходит в этом файле, приблизительно на строке 474:

// Attach tooltips to document
JFactory::getDocument()->addScriptDeclaration(
    "jQuery(document).ready(function() {
        jQuery('" . $selector . "').tooltip(" . $options . ");
    });"
);

Для отключения функции необходимо удалить или закомментировать указанные строки.

2. Блокировка загрузки ненужных JS-скриптов в шаблоне

Один из популярных и проверенных способов заблокировать загрузку ряда ненужных JS-файлов — добавить следующий код в раздел <head> страницы. Путь к файлу:
/templates/{имя_шаблона}/index.php.

$headlink = $this->getHeadData();
unset($headlink['scripts']['/media/system/js/caption.js']);
unset($headlink['scripts']['/media/system/js/validate.js']);
unset($headlink['scripts']['/templates/protostar/js/template.js']);
unset($headlink['scripts']['/media/jui/js/jquery.min.js']);
unset($headlink['scripts']['/media/jui/js/jquery-migrate.min.js']);
unset($headlink['scripts']['/media/jui/js/bootstrap.min.js']);
unset($headlink['scripts']['/media/jui/js/jquery-noconflict.js']);
$this->setHeadData($headlink);

3. Удаление подгрузки JS-скриптов на уровне системных файлов Joomla

Ниже описано, как отключить автоматическую подгрузку этих JS-скриптов непосредственно в PHP-файлах системы Joomla.

Шаги:

  1. Откройте файл по пути: /libraries/cms/html/html.php.
  2. Найдите функцию public static function script (приблизительно строка 672).
  3. Чуть ниже найдите строку:
    php $includes = static::includeRelativeFiles('js', $file, $relative, $detect_browser, $detect_debug);
  4. Замените её на следующий блок кода:
    php if(strpos($_SERVER['REQUEST_URI'], 'administrator/')) { $includes = static::includeRelativeFiles('js', $file, $relative, $detect_browser, $detect_debug); }

Принцип работы и важное замечание:
Код проверяет URL текущего запроса. Если в адресе присутствует подстрока administrator/ (что означает доступ к административной панели сайта), то подгрузка скриптов выполняется. Для всех остальных страниц (публичная часть сайта) подгрузка указанных скриптов не производится. Это необходимо для корректной работы административного интерфейса Joomla, которому эти скрипты могут быть нужны, в то время как на фронтенде их можно отключить для повышения производительности.

Сводная таблица действий

Цель действияОбъект / ФункцияПуть к файлуМетод
1Отключение всплывающих подсказок (tooltip)hasTooltip/libraries/cms/html/bootstrap.phpУдалить или закомментировать строки с ~474 по ~482.
2Блокировка скриптов в конкретном шаблонеСкрипты в <head>/templates/{имя_шаблона}/index.phpДобавить блок кода с unset для ненужных скриптов.
3Системное отключение скриптов во фронтендеФункция html.php/libraries/cms/html/html.phpЗаменить строку вызова includeRelativeFiles на условную проверку URL.
Оцените статью
codda