Добавление CSS и JS в форму с вложениями

36

Мне нужно добавить некоторые внешние и локальные файлы CSS и JavaScript в форму, но я не могу найти правильный способ сделать это. Я просто добавляю пути и URL для файлов JS и CSS?

Я предполагаю, $form['#attached']['css'][]и $form['#attached']['js'][]это правильные места для этого, поэтому они перезагружаются при перестройке формы. Кажется, я что-то упустил.

vintorg
источник

Ответы:

71

Вы смотрели на документацию?

Присоедините CSS и JS к форме

http://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#attached

$form['#attached']['css'][] = drupal_get_path('module', 'ajax_example') . '/ajax_example.css';

$form['#attached']['js'][] = drupal_get_path('module', 'ajax_example') . '/ajax_example.js';

Внешние файлы

http://api.drupal.org/api/drupal/includes%21common.inc/function/drupal_process_attached/7

Внешние файлы 'js' и 'css' также могут быть загружены. Например:

$build['#attached']['js']['http://code.jquery.com/jquery-1.4.2.min.js'] = array('type' => 'external');
Алекс Гилл
источник
Я имею. Можете ли вы сказать мне, где он ссылается, как обрабатывать внешние файлы CSS?
Винторг
Перейдите на страницу api.drupal.org/api/drupal/includes%21common.inc/function/… и найдите «Внешний».
Алекс Гилл
2
Просто примечание - вы можете добавить JavaScript, как описано выше, к конкретной форме, добавив функцию named <module name>_form_<form id>_alterв ваш модуль. Поиск идентификатора формы описан здесь: drupal.stackexchange.com/questions/5802/…
Nux
1
Этот пример довольно плох, потому что вы предполагаете, что это будет ЕДИНСТВЕННОЕ вложение в форме!
DoubleJosh
6
Комментарий под двойным джошем означает: обычно нужно добавлять в массив, а не заменять его. Так что пример должен быть и $form['#attached']['css'][] = drupal_get_path('module', 'ajax_example') . '/ajax_example.css';т.д ..
tanius
11

Вот метод для добавления встроенного CSS в формы ...

$form['#attached']['css'][] = array(
  'data' => '.my-example-element { display: none; }',
  'type' => 'inline',
);

Обратите внимание, что вы должны добавить в массив css, а не заменить его . Это означает, что вы должны использовать: ['css'][] =вместо того, ['css'] =чтобы избегать раздавливания других дополнений.

doublejosh
источник
6

Вот один из способов сделать это через. вызов функции с использованием #after_buildсвойства. Просто введите идентификатор вашей формы в случае переключения.

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  switch ($form_id) {
    case 'my_form':
      $form['#after_build'][] = 'mymodule_after_build';
      break;
  }
}

function mymodule_after_build($form, &$form_state) {
  $path = drupal_get_path('module', 'mymodule');
  drupal_add_js ("$path/mymodule.js");
  return $form; 
}

Также вы можете следовать этому хорошему уроку Добавление CSS и JS в друпальные формы

Надеюсь это поможет. :)

Прерит Мохан
источник
Хотя это все еще работает в Drupal 7, похоже, это взлом D6 , необходимый, потому #attachedчто не существовал в D6 .
Танус
Вы не должны использовать drupal_add_jsв форме. Вы закончите с проблемой состояния проверки.
DoubleJosh 20.09.16
1
@doublejosh Это трехлетний ответ :)
Прерит Мохан