Почему не срабатывает drupal_add_js
Периодически Друпал не подключает 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'].
Дьявол, как известно, кроется в деталях.