Если необходимо подключить стили или скрипты к своей форме, как это сделать?
Первый подход — добавить необходимые стили и скрипты в тему оформления. В этом случае, если к примеру, идет речь о форме редактирования, которая отображается в шаблоне используемом только для админ-панели, вам придется заниматься кастомизацией ещё одной темы, помимо основной. А ваш модуль станет зависим от темы оформления.
Оптимально было бы подключить нужные файлы с помощью одного из хуков form API.
hook_form_alter
Прямое подключение
Можно добавить в хук form_alter вызов drupal_add_js(), drupal_add_css(). И это будет работать до тех пор, пока ваша форма успешно проходит валидацию. При ошибке в любом из #validate hook-ов, форма потеряет подключаемые файлы.
| 1 2 3 4 5 6 | function MYMODULE_form_alter(&$form, &$form_state, $form_id) {   if ($form_id == 'MYFORMID') {     drupal_add_css(dirname(__FILE__) . '/css/form-mymorm.css';   }   ... } | 
#suffix
Атрибут формы suffix (и аналогично prefix) позволяет добавить произвольный HTML код. Никто не мешает вставить следующее:
| 1 2 3 4 5 6 7 | $form['#suffix'] .= ' <style> /* ваши стили */ </style> <script> /* ваш скрипт */ </script>'; | 
Хотя этот подход не испытывает проблем на этапе валидации, но явно не сочетается с парадигмой MVC.
#after_build
В этом свойстве формы можно указать функции вызываемые каждый раз после окончания сборки формы. Как раз в этот момент можно использовать drupal_add_css() и drupal_add_js(), чтобы корректно подключить нужные файлы.
| 1 2 3 4 5 6 7 8 9 10 11 | function MYMODULE_form_alter(&$form, $form_state, $form_id) {   if($form_id == 'myformid'){     $form['#after_build'][] = '_MYMODULE_after_build_myformid';   } } function _MYMODULE_after_build_myformid($form, &$form_state) {   drupal_add_css(dirname(__FILE__) . '/css/form-mymorm.css';   // не забудьте вернуть $form   return $form; } | 
Все в этом варианте хорошо и правильно, но нам всего то лишь нужно подключить пару файлов, а не превращать работу с формой в бесконечный вызов хелперов. :)
#attached
Потому в Drupal 7 появляется специальный атрибут формы — #attached. Здесь вы можете указать необходимые JS и CSS файлы.
| 1 2 3 4 5 6 7 8 9 | function MYMODULE_form_alter(&$form, $form_state, $form_id) {   if($form_id == 'myformid'){     $form['#attached']['js'] = array(       drupal_get_path('module', 'MYMODULE') . '/example.js' => array(           'type' => 'file',       ),     );   } } | 
Ну или так:
| 1 2 3 4 5 6 | $form['#attached']['css'] = array(   drupal_get_path('module', 'MYMODULE') . '/example.css', ); $form['#attached']['js'] = array(   drupal_get_path('module', 'MYMODULE') . '/example.js', ); | 
Последние примеры я спер из документации drupal form API :).
