Отключить для анонимов все JavaScript в хуке, кроме определённой страницы

Drupal: 

JavaScript ускоряет сайт в руках профессионалов, обновляя страницы без перезагрузки. Также js помогает подобрать фразы для поиска. Но есть случаи, когда js отнимает скорость загрузки страниц, а его польза сомнительна. Если вашему сайту не нужен слайдер, выпадающие меню с js, или слайдер нужен только на главной, отключите javascript там, где он не нужен. Пользователи мобильного Интернета или гаджетов получат больше пользы на вашем сайте (скорость загрузки).

Отключить все JS из админки Друпал невозможно (о таком модуле мне ещё неизвестно), и друпал будет добавлять по умолчанию:

  • misc/drupal.js - стандартный скрипт,
  • misc/jquery.js - jquery библиотека, которая встроена в ядро,
  • misc/jquery.once.js - вторая библиотека, встроенная в ядро
  • sites/default/files/language/ru_IKGJKE34jKY...js - файл, который невозможно отключить, так как его имя динамическое и меняется.

Для некоторых сайтов без js-функций подключать стандартные js-файлы не нужно, это замедляет скорость отображения страниц при перелистывании (в 5 раз).

1й скрипт - Если вам знакома медленная работа Друпал со множеством подключенных библиотек JS, то возможно, вам пригодится скрипт отключения всех JS. А если некоторым страницам нужны JS, тогда отключать нужно скриптами номер 2 или три.

2й скрипт - Если на сайте есть поиск, в котором используется функция autocomplete (автодополнение), т. е. ввод термина таксономии или Entity Reference, то для этой страницы можно не отключать скрипты, и во втором примере представлено такое решение. Также там закомментированы команды удаления отдельных скриптов, если нужно удалить только отдельные скрипты.

3й скрипт - если вы хотите отключить javascript для всех, в том числе для авторизованных, тогда стоит это сделать на страницах кроме imce - иначе загрузка файлов менеджером IMCE не будет работать. Отметим, что для страницы imce применяется тема внешнего сайта, а не тема админки.

Код должен располагаться в template.php темы. Название должно содержать машинное имя темы и имя хука: тема_js_alter(&$js).
Пояснение: заголовок функции с амперсандом слева от переменной означает, что переменная может меняться внутри функции, и эти изменения отразятся в коде, вызвавшем функцию, то есть переменная глобальная. Инструкция return не нужна.

Если вы хотите доработать код, тут написано про hook_js_alter(), а для изучения переменных используйте модуль Devel и инструкцию dpm($js), чтобы узнать содержимое любой переменной (обычно выводится на странице вверху).

отключение всех js для анонимов, кроме страницы поиска кино
  1. /**
  2.  * Implements hook_js_alter().
  3.  */
  4. function MYtheme_js_alter(&$js) {
  5. if (user_is_anonymous()) {
  6. if (current_path() != 'поиск-кино') {
  7. $js=array();
  8. }
  9. }
  10. }
отключение всех js для анонимов и сборка массива js для страницы поиска только из нужных скриптов
  1. /**
  2.  * Implements hook_js_alter().
  3.  */
  4. function MYtheme_js_alter(&$js) {
  5. if (user_is_anonymous()) {
  6. if (current_path() != 'поиск-кино') {
  7. $js=array();
  8. } else {
  9. $jsnew = array('misc/drupal.js' => $js['misc/drupal.js'],
  10. 'misc/jquery.js' => $js['misc/jquery.js'],
  11. 'misc/jquery.once.js' => $js['misc/jquery.once.js'],
  12. 'misc/autocomplete.js' => $js['misc/autocomplete.js']);
  13. $js = $jsnew;
  14. //unset($js['misc/drupal.js']);
  15. //unset($js['misc/jquery.js']);
  16. //unset($js['misc/jquery.once.js']);
  17. //unset($js['misc/textarea.js']);
  18. //unset($js['misc/filter.js']);
  19. }
  20. }
  21. }
отключить js для всех, кроме страницы поиска кино и кроме страницы imce
  1. /**
  2.  * Implements hook_js_alter().
  3.  */
  4. function MYtheme_js_alter(&$js) {
  5. //if (user_is_anonymous()) {
  6. $current = current_path();
  7. if ($current == 'поиск-кино') {
  8. //оставляем только эти скрипты на странице поиска
  9. $jsnew = array('misc/drupal.js' => $js['misc/drupal.js'],
  10. 'misc/jquery.js' => $js['misc/jquery.js'],
  11. 'misc/jquery.once.js' => $js['misc/jquery.once.js'],
  12. 'misc/autocomplete.js' => $js['misc/autocomplete.js']);
  13. $js = $jsnew;
  14. //unset($js['misc/drupal.js']);
  15. //unset($js['misc/jquery.js']);
  16. //unset($js['misc/jquery.once.js']);
  17. //unset($js['misc/textarea.js']);
  18. //unset($js['misc/filter.js']);
  19. } elseif ($current != 'imce') {
  20. //для остальных страниц отключаем все скрипты - обнуляем массив $js
  21. $js=array();
  22. }
  23. //}
  24. }

А для оптимизации JavaScript используйте модули пакета Advagg и этот мануал: http://www.northstudio.com/blog/increase-your-drupal-site-pagespeed-scor...
Для ускорения для анонимов, обязательно используйте Boost и внесите изменения в .htaccess для ускорения на уровне сервера.