Bagaimana cara benar-benar mengatur maxlength untuk bidang textarea dalam formulir kontak

11

Saya perlu membatasi pesan teks dari formulir kontak modul inti ke sejumlah karakter.

Inilah faktanya

  1. Formulir API tidak memungkinkan seseorang untuk menetapkan panjang maksimum pada jenis bidang textarea [sementara HTML biasa]

  2. The Maxlength modul, tidak memungkinkan Anda untuk benar-benar mengatur panjang maksimum. Ia mendapatkan panjang maksimalnya dari panjang maksimal bidang, ditentukan pada bagian bidang pengelolaan masing-masing jenis konten

  3. Membuat tipe elemen form baru menggunakan hook_element_info, masih tidak menjamin saya bisa menambahkannya #maxlengthke textarea. Selain itu jika saya berhasil saya perlu mengubah lagi modul formulir kontak untuk mengesampingkan bidang textarea pesan yang sebenarnya dengan milik saya.

Jadi saya bisa mengubahnya dengan jelas dan langsung?

Apa ide terbaik untuk mengubah semua bidang textarea di situs web?

drupal_stuff_alter
sumber

Jawaban:

6

API Formulir tidak memungkinkan untuk menetapkan panjang maksimal pada jenis bidang teks [sementara HTML biasa]

Itu tidak sepenuhnya benar .... HTML5 memperkenalkan properti maxlength untuk textareas, versi sebelumnya tidak memilikinya (lihat https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea ).

Template default yang datang dengan Drupal 7 semuanya menggunakan XHTML, sehingga kurangnya dukungan eksplisit untuk HTML5 masuk akal.

Selama doctype Anda adalah HTML5, ini mungkin akan berfungsi:

$form['element'] = array(
  '#type' => 'textarea',
  '#attributes' => array('maxlength' => 200),
);
Clive
sumber
Clive Saya benar-benar menemukan solusi yang berfungsi, saya diposting di bawah ini. Terima kasih atas jawaban anda.
drupal_stuff_alter
6

Anda dapat menggunakan modul Maxlength seperti ini, letakkan properti #maxlength dan #maxlength_js pada elemen yang ingin Anda kontrol.

$form['comments'] = array(
  '#type' => 'textarea',
  '#title' => t('Comments'),
  '#maxlength_js' => TRUE,
  '#maxlength' => 1000,
);
ThomasHuang025
sumber
4

Pertama saya mendefinisikan bentuk pengaturan, kemudian membuat bentuk kait mengubah:

function contact_form_form_alter(&$form, &$form_state, $form_id) {

  if ($form_id == 'contact_site_form') {
    $maximum_limit = (int) variable_get('contact_form_maxlength', 500);
    if($maximum_limit && is_numeric($maximum_limit)) {
    $form['message']['#title'] = $form['message']['#title'] . t(' (maximum @max characters)', array( '@max' => $maximum_limit));
    $form['message']['#maxlength'] = $maximum_limit ;
    }
  }
}

Ini sepertinya bekerja dengan baik.

drupal_stuff_alter
sumber
Selain itu, Anda dapat menerapkan hook_form_FORM_ID_alter dan menyimpan cek formulir ID, yaitu: contact_form_form_contact_site_form_alter. Agak seteguk sebagai nama fungsi, harus diakui.
Alfred Armstrong
Ide yang bagus. Saya tidak punya kebiasaan ini :-)
drupal_stuff_alter