Cách thực sự đặt maxlength cho trường textarea ở dạng liên hệ


11

Tôi cần giới hạn thông điệp textarea của biểu mẫu liên hệ mô-đun cốt lõi ở một số lượng ký tự nhất định.

Dưới đây là sự thật

  1. API biểu mẫu không cho phép một người đặt tối đa cho các loại trường văn bản [trong khi HTML đơn giản]

  2. Các maxlength mô-đun, không cho phép bạn để thực sự thiết lập chiều dài tối đa. Nó nhận được độ dài tối đa từ độ dài tối đa của trường, được xác định trên phần trường quản lý của từng loại nội dung

  3. Tạo một loại phần tử biểu mẫu mới bằng hook_element_info, vẫn không đảm bảo tôi có thể thêm #maxlengthvào vùng văn bản. Ngoài ra, nếu tôi thành công, tôi cần thay đổi lại mô-đun biểu mẫu liên hệ để ghi đè trường văn bản tin nhắn thực tế bằng của tôi.

Vì vậy, tôi có thể thay đổi nó đơn giản và đơn giản?

Ý tưởng tốt nhất để thay đổi tất cả các trường văn bản trong trang web là gì?

Câu trả lời:


6

API biểu mẫu không cho phép đặt mức tối đa cho các loại trường văn bản [trong khi HTML đơn giản]

Điều đó không hoàn toàn đúng .... HTML5 đã giới thiệu một thuộc tính maxlength cho textareas, các phiên bản trước không có nó (xem https://developer.mozilla.org/en-US/docs/Web/HTML/Euity/textarea ).

Các mẫu mặc định đi kèm với Drupal 7 đều sử dụng XHTML, do đó, việc thiếu hỗ trợ rõ ràng cho HTML5 có ý nghĩa hoàn hảo.

Miễn là doctype của bạn HTML5, điều này có thể sẽ hoạt động:

$form['element'] = array(
  '#type' => 'textarea',
  '#attributes' => array('maxlength' => 200),
);

Clive Tôi thực sự tìm thấy một giải pháp làm việc, tôi đã đăng nó dưới đây. Cảm ơn câu trả lời của bạn.
drupal_ ware_alter

6

Bạn có thể sử dụng mô-đun Maxlength như thế này, đặt cả hai thuộc tính #maxlength và #maxlength_js vào các yếu tố bạn muốn kiểm soát.

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

4

Trước hết tôi đã xác định một biểu mẫu cài đặt, sau đó thực hiện thay đổi biểu mẫu móc:

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

Điều này dường như đang làm việc tốt.


Chỉ là một bên, bạn có thể triển khai hook_form_FORM_ID_alter và lưu kiểm tra ID mẫu, tức là: contact_form_form_contact_site_form_alter. Một chút của một miệng như một tên chức năng, thừa nhận.
Alfred Armstrong

Đó là một ý tưởng tuyệt vời. Tôi không có thói quen này :-)
drupal_ ware_alter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.