Почему не срабатывает drupal_add_js

Опубликовано 2015.12.03

Периодически Друпал не подключает js файл, хотя вы корректно его подключили, файл физически существует и у него выставлены правильные права. Гугл вам не скажет почему у вас не работает, а только 10 раз покажет одни и те же способы подключения js к форме, странице или блоку. Приведу простой пример. Допустим модуль best_form подключает js и css файлы к форме редактирования материала, путем альтера формы: function best_form_form_node_form_alter(&$form, &$form_state) { $form['#attached']['css'] = array(drupal_get_path('module', 'best_form') . '/theme/best.css'); $form['#attached']['js'] = array(drupal_get_path('module', 'best_form') . '/theme/best.js'); } -Код корректный и без ошибок? -Да, всё верно. Однако на практике браузер подключает best.css , а best.js не подключается. Занавес. Начинаем копать. Проверяем какие ещё модули аттачат к этой форме свои скрипты. Находим скажем модуль bad_form со следующим кодом внутри: function bad_form_form_node_form_alter(&$form, &$form_state) { $form['#attached']['js'] = array(drupal_get_path('module', 'bad_form') . '/theme/bad.js'); } Поняли ошибку? Оба модуля определяют элемент ['#attached']['js'] массива $form. Именно поэтому и подключается лишь 1 js файл. Чтобы исправить проблему перепишем код так: function best_form_form_node_form_alter(&$form, &$form_state) { $form['#attached']['css'][] = drupal_get_path('module', 'best_form') . '/theme/best.css'; $form['#attached']['js'][] = drupal_get_path('module', 'best_form') . '/theme/best.js'; } и так: function bad_form_form_node_form_alter(&$form, &$form_state) { $form['#attached']['js'][] = drupal_get_path('module', 'bad_form') . '/theme/bad.js'; } Теперь никто никого не затирает и оба модуля корректно наполняют массив $form['#attached']['js']. Дьявол, как известно, кроется в деталях.