วิธีตั้งค่าความยาวสูงสุดสำหรับฟิลด์ textarea ในแบบฟอร์มการติดต่อ


11

ฉันต้องการ จำกัด ข้อความ textarea ของแบบฟอร์มการติดต่อหลักของโมดูลให้มีจำนวนอักขระที่แน่นอน

นี่คือข้อเท็จจริง

  1. API แบบฟอร์มไม่อนุญาตให้หนึ่งตั้งค่าความยาวสูงสุดในประเภทฟิลด์ textarea [ในขณะที่ HTML ธรรมดา]

  2. MAXLENGTHโมดูลไม่ได้ช่วยให้คุณสามารถตั้งค่าจริงความยาวสูงสุด ได้รับความยาวสูงสุดจากความยาวสูงสุดของฟิลด์ที่กำหนดไว้ในส่วนจัดการประเภทเนื้อหาแต่ละประเภท

  3. การสร้างประเภทองค์ประกอบรูปแบบใหม่โดยใช้ hook_element_info ยังไม่รับประกันฉันสามารถเพิ่มลง#maxlengthใน textarea นอกจากนี้หากฉันประสบความสำเร็จฉันต้องเปลี่ยนโมดูลรูปแบบการติดต่ออีกครั้งเพื่อแทนที่ฟิลด์ข้อความ textarea จริงด้วยเหมือง

ดังนั้นฉันสามารถแก้ไขได้อย่างง่ายดายและตรงไปตรงมา?

เป็นความคิดที่ดีที่สุดในการเปลี่ยนแปลงฟิลด์ textarea ทั้งหมดในเว็บไซต์คืออะไร?

คำตอบ:


6

API ของฟอร์มไม่อนุญาตให้ตั้งค่าความยาวสูงสุดในประเภทฟิลด์ textarea [ขณะที่ HTML ธรรมดา]

ไม่เป็นความจริงอย่างเด็ดขาด .... HTML5 แนะนำคุณสมบัติความยาวสูงสุดสำหรับ textareas รุ่นก่อนหน้าไม่มี (ดูhttps://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea )

เทมเพลตเริ่มต้นที่มาพร้อมกับ Drupal 7 ทั้งหมดใช้ XHTML ดังนั้นการขาดการสนับสนุนอย่างชัดเจนสำหรับ HTML5 จึงเหมาะสมอย่างยิ่ง

ตราบใดที่ประเภทเอกสารของคุณเป็น HTML5 สิ่งนี้อาจใช้ได้:

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

ไคลฟ์ฉันพบวิธีแก้ปัญหาที่ใช้งานได้จริงฉันโพสต์ไว้ด้านล่าง ขอบคุณสำหรับคำตอบ.
drupal_stuff_alter

6

คุณสามารถใช้โมดูลMaxlengthเช่นนี้ใส่ทั้งคุณสมบัติ #maxlength และ #maxlength_js บนองค์ประกอบที่คุณต้องการควบคุม

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

4

ก่อนปิดฉันกำหนดรูปแบบการตั้งค่าจากนั้นทำการแก้ไขรูปแบบเบ็ด:

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

ดูเหมือนว่าจะทำงานได้ดี


เช่นกันคุณสามารถใช้ hook_form_FORM_ID_alter และบันทึกการตรวจสอบ ID ของฟอร์มเช่น: contact_form_form_contact_site_form_alter บิตของคำหนึ่งเป็นชื่อฟังก์ชันที่ยอมรับ
Alfred Armstrong

นั่นเป็นความคิดที่ดี ฉันไม่มีนิสัยนี้ :-)
drupal_stuff_alter
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.