Menambahkan CSS dan JS ke formulir dengan lampiran

36

Saya perlu menambahkan beberapa file CSS dan JavaScript eksternal dan lokal ke formulir, tetapi sepertinya saya tidak dapat menemukan cara yang tepat untuk melakukan ini. Apakah saya cukup menambahkan jalur dan URL untuk file JS dan CSS?

Saya berasumsi $form['#attached']['css'][]dan $form['#attached']['js'][]merupakan tempat yang tepat untuk melakukan ini, sehingga mereka dimuat kembali pada formulir yang dibangun kembali. Saya sepertinya kehilangan sesuatu.

Vintorg
sumber

Jawaban:

71

Sudahkah Anda melihat dokumentasinya?

Lampirkan CSS dan JS ke formulir

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';

File eksternal

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

File 'js' dan 'css' eksternal juga dapat dimuat. Sebagai contoh:

$build['#attached']['js']['http://code.jquery.com/jquery-1.4.2.min.js'] = array('type' => 'external');
Alex Gill
sumber
Saya sudah. Bisakah Anda memberi tahu saya di mana referensi tentang cara menangani file CSS eksternal?
vintorg
Pergi ke api.drupal.org/api/drupal/includes%21common.inc/function/… dan cari 'Eksternal'.
Alex Gill
2
Hanya sebuah catatan - Anda dapat menambahkan JavaScript seperti dijelaskan di atas ke formulir tertentu dengan menambahkan fungsi yang dinamai <module name>_form_<form id>_alterke modul Anda. Formulir id pencarian dijelaskan di sini: drupal.stackexchange.com/questions/5802/…
Nux
1
Contoh ini agak buruk karena Anda menganggap ini akan menjadi lampiran HANYA pada formulir!
doublejosh
6
Komentar oleh doublejosh berarti: biasanya seseorang harus menambahkan ke array daripada menggantinya. Jadi contohnya harus $form['#attached']['css'][] = drupal_get_path('module', 'ajax_example') . '/ajax_example.css';dll.
tanius
11

Berikut metode untuk menambahkan CSS sebaris ke formulir ...

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

Perhatikan bahwa Anda harus menambahkan ke array css daripada menggantinya . Berarti Anda harus menggunakan: ['css'][] =daripada ['css'] =menghindari menekan tambahan lainnya.

doublejosh
sumber
6

Berikut adalah salah satu cara untuk melakukannya yaitu melalui. memanggil fungsi menggunakan #after_buildproperti. Cukup berikan id formulir Anda dalam sakelar kasus.

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; 
}

Anda juga dapat mengikuti tutorial yang bagus ini. Menambahkan css dan js ke formulir drupal

Semoga ini membantu. :)

Prerit Mohan
sumber
Meskipun ini masih berfungsi di Drupal 7, tampaknya ini adalah hack D6 , diperlukan karena #attachedtidak ada di D6 .
tanius
Anda sebaiknya tidak menggunakan drupal_add_jsformulir. Anda akan berakhir dengan masalah status validasi.
doublejosh
1
@doublejosh Ini adalah jawaban tiga tahun :)
Prerit Mohan