ประเภทฟิลด์ตัวเลขใน Form API


12

ฉันกำลังพยายามเพิ่มประเภทฟิลด์ "หมายเลข" ลงในแบบฟอร์มโดยใช้ FAPI:

$form['phone_number']['areacode'] = array(
  '#type' => 'textfield',
  '#title' => '---',
  '#width' => '30%',
  '#align' => 'center',
  '#required' => true,
  '#maxlength' => 3
);

ฉันเปลี่ยน TYPE เป็น "number" และฟิลด์ไม่ได้ถูกสร้างเลย โมดูลตัวเลขถูกเปิดใช้งาน ฉันใช้ฟังก์ชั่นชุดรูปแบบต่อไปนี้:

  • MYTHEME_form_element
  • MYTHEME_textfield
  • MYTHEME_container

สิ่งใดที่อยู่เบื้องหลังฟิลด์นี้ไม่ปรากฏขึ้นเมื่อฉันใช้#type = numberหรือ#type = number_integerฯลฯ

สิ่งนี้อาจเกี่ยวข้องกับมัน:

การสร้างเขตข้อมูล Number (จำนวนเต็มและทศนิยม) ด้วยตนเองในรหัสสำหรับฟอร์มที่กำหนดเอง

อย่างไรก็ตามฉันต้องการให้แสดงเป็น "number" ใน HTML ดังนั้นสมาร์ทโฟนจึงแสดงหมายเลขโทรออก

ความคิดใด ๆ

คำตอบ:


13
$form['my_element'] = array(
    '#type' => 'textfield',
    '#attributes' => array(
        ' type' => 'number', // insert space before attribute name :)
    ),
    '#title' => 'My number',
    '#required' => true,
    '#maxlength' => 3
);

ไม่ชัดเจนอะไร "ต้องการประเภทฟิลด์ตัวเลขใน API แบบฟอร์ม"หรือไม่ กำหนดแอตทริบิวต์ "type" ( พร้อมช่องว่าง ) ใน #attribute อาร์เรย์ที่มีค่าที่ต้องการ: หมายเลข, วันที่, สี ... แฮ็คที่สกปรก
Arthur

ความยาวสูงสุดไม่ทำงาน
logeshvaran

1
ทำไมมันต้องมีพื้นที่?
fritzmg

สิ่งนี้นำไปสู่ ​​HTML btw ที่ไม่ถูกต้อง:<input type="number" type="text">
fritzmg

5

คุณสามารถติดตั้งและใช้องค์ประกอบของโมดูลได้


นี่เป็นวิธีที่ถูกต้องในการรับฟิลด์หมายเลข HTML5
ถอดรหัส

1
#type="numberfield"เป็นวิธีที่ถูกต้องในการปรับฟิลด์เมื่อใช้โมดูลนี้
YPCrumble

1
โมดูลนี้รวมอยู่ในคอร์ใน Drupal 8 แล้ววิธีที่ถูกต้องในการสร้างฟิลด์ตัวเลขคือการใช้'#type' => 'number'(ไม่ใช่'numberfield') ในเรนเดอร์อาร์เรย์
fritzmg

2

ฉันไปปาร์ตี้ช้าไปหน่อย ปัญหาคือว่า theme_textfield (D7: includes/form.incเส้น 3924ff) $element['#attributes']['type'] = 'text';ยากรหัส

คุณสามารถตัดสายดังกล่าวเป็นif (!isset($element['#attributes']['type'])) { ... }หรือรอให้แพทช์https://www.drupal.org/node/2545318ใช้งานได้


1

นี่คือรหัสของคุณด้านล่าง ..

$form['phone_number']['areacode'] = array(
'#type' => 'textfield',
'#title' => '---',
'#width' => '30%',
'#align' => 'center',
'#required' => true,
'#maxlength' => 3
);

โปรดบอกฉันว่าอะไรคือ ['phone_number'] มันคือคอนเทนเนอร์หรือไม่หรือมีอยู่ในแบบฟอร์มของคุณหรือไม่และถ้าคุณต้องการสร้างฟิลด์ที่กำหนดเองในแบบฟอร์มของคุณคุณควรใช้ hook_form_alter hook_form_alter

ชอบ

  function mymodule_form_alter($form_id, &$form) {
 if ($form_id == 'form_id') {

$form['field_name'] = array(
 '#type' => 'textfield',     
 '#title' => t('title'),
 '#description' => t('Description.'),
 '#width' => '30%',
 '#align' => 'center',
 '#required' => true,
 '#maxlength' => 3
 );
  }
   }

หวังว่านี่จะช่วยคุณได้ ..


0

ฉันไม่เห็นว่าการทำงานกับค่าที่ไม่ถูกต้องสำหรับฟิลด์#typeแต่คุณสามารถทำสิ่งนั้นได้:

องค์ประกอบแบบฟอร์ม:

$form['my_element'] = array(
    '#type' => 'textfield',
    '#attributes' => array(
        'data-type' => 'number',
    ),
    '#title' => '---',
    '#width' => '30%',
    '#align' => 'center',
    '#required' => true,
    '#maxlength' => 3
);

และการใช้งานtheme_textfield

if(isset($element['#attributes']['data-type']) && $element['#attributes']['data-type'] === 'number'){
    $output = '<input type="number" />';
}else{
    $output = '<input' . drupal_attributes($element['#attributes']) . ' />';
}

ฉันกำลังคิดแบบเดียวกันกับวิธีแก้ปัญหา - แต่คุณหมายความว่ายังไงมันจะไม่ทำงานกับค่าที่ไม่ถูกต้อง?
Alex.Barylski

ถ้าคุณไม่ใส่ค่าที่ถูกต้องสำหรับ#typeองค์ประกอบของแบบฟอร์มจะไม่แสดงผลตามที่คุณระบุไว้ก่อนหน้านี้
Victor Lazov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.