Додавання CSS та JS до форми із вкладеннями


36

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

Я вважаю , $form['#attached']['css'][]і $form['#attached']['js'][]є правильні місця , щоб зробити це, так що вони перезавантажуються в формі перебудувань. Мені здається, чогось бракує.

Відповіді:


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?
vintorg

Перейдіть на api.drupal.org/api/drupal/includes%21common.inc/function/… та знайдіть "Зовнішній".
Алекс Гілл

2
Лише зауваження - ви можете додати JavaScript, як описано вище, до конкретної форми, додавши функцію, названу <module name>_form_<form id>_alterу ваш модуль. Знайти ідентифікатор форми описується тут: drupal.stackexchange.com/questions/5802/…
Nux

1
Цей приклад якось поганий, тому що ви припускаєте, що це буде ТІЛЬКИЙ додаток до форми!
doublejosh

6
Коментар doublejosh означає: зазвичай слід додати до масиву, а не замінювати його. Тож приклад повинен бути $form['#attached']['css'][] = drupal_get_path('module', 'ajax_example') . '/ajax_example.css';і т.
Д.

11

Ось метод додавання вбудованого CSS до форм ...

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

Зауважте, що вам слід додати до масиву css, а не замінювати його . Сенс, який ви повинні використовувати: ['css'][] =замість того, ['css'] =щоб не уникати інших доповнень.


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 .
tanius

Не слід використовувати drupal_add_jsна формі. У вас виникнуть проблеми зі станом перевірки.
doublejosh

1
@doublejosh Це трирічна відповідь :)
Прерит Мохан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.