Loại trường số trong API biểu mẫu


12

Tôi đang cố gắng thêm loại trường "số" vào biểu mẫu bằng FAPI:

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

Tôi thay đổi TYPE thành "số" và trường hoàn toàn không được tạo. Các mô-đun số được kích hoạt. Tôi đã thực hiện các chức năng chủ đề sau:

  • MYTHEME_form_element
  • MYTHEME_textfield
  • MYTHEME_container

Điều gì có thể đằng sau lĩnh vực này không hiển thị khi tôi sử dụng #type = numberhoặc #type = number_integer, vv?

Điều này có thể có một cái gì đó để làm với nó:

Tạo các trường Số (số nguyên và số thập phân) theo cách thủ công trong mã cho các biểu mẫu tùy chỉnh

Tuy nhiên, tôi thực sự muốn loại hiển thị là "số" trong HTML để điện thoại thông minh hiển thị trình quay số

Có ý kiến ​​gì không?

Câu trả lời:


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

Có gì không rõ ràng? "Loại trường số trong API mẫu" có cần không? Xác định "loại" thuộc tính ( có khoảng trắng) trong mảng #attote với giá trị mong muốn: số, ngày, màu ... hack bẩn
Arthur

chiều dài tối đa không hoạt động
logeshvaran

1
Tại sao nó ned để có một không gian?
fritzmg

Điều này dẫn đến btw HTML không hợp lệ:<input type="number" type="text">
fritzmg

5

Bạn có thể cài đặt và sử dụng các yếu tố mô-đun cho nó.


Đây là cách chính xác để có được trường số HTML5.
Giải mã

1
#type="numberfield"là cách chính xác để điều chỉnh trường khi sử dụng mô-đun này.
YPCrumble

1
Mô-đun này đã được bao gồm trong lõi trong Drupal 8. Cách chính xác để tạo trường số là sử dụng '#type' => 'number'(không 'numberfield') trong mảng kết xuất.
fritzmg

2

Tôi đến bữa tiệc muộn một chút. Vấn đề là mã cứng của themeSpherefield (D7 : includes/form.inc, 3924ff)$element['#attributes']['type'] = 'text'; .

Bạn có thể gói cuộc gọi đã nói trong một if (!isset($element['#attributes']['type'])) { ... }hoặc đợi bản vá https://www.drupal.org/node/2545318 được áp dụng.


1

đây là mã của bạn dưới đây ..

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

vui lòng cho tôi biết ['phone_number'] là gì, nó có phải là container hay không hoặc nó có tồn tại trong biểu mẫu của bạn hay không và nếu bạn muốn tạo trường tùy chỉnh trong biểu mẫu của mình thì bạn nên sử dụng hook_form_alter hook_form_alter

giống

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

hy vọng điều này sẽ giúp bạn ..


0

Tôi không thấy nó hoạt động với giá trị không hợp lệ cho #type , tuy nhiên bạn có thể làm một cái gì đó như thế:

Phần tử biểu mẫu:

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

Và thực hiện themeSpherefield

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

Tôi đã suy nghĩ điều tương tự cho một giải pháp - nhưng ý bạn là nó sẽ không hoạt động với #value không hợp lệ ???
Alex.Barylski

Chà, nếu bạn không đặt một giá trị hợp lệ cho #type , phần tử biểu mẫu sẽ không được hiển thị, như bạn đã nêu trước đây.
Victor Lazov
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.