Jenis bidang angka dalam Formulir API

12

Saya mencoba menambahkan jenis bidang "angka" ke formulir menggunakan FAPI:

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

Saya mengubah TYPE menjadi "angka" dan bidang tidak dihasilkan sama sekali. Modul angka diaktifkan. Saya telah menerapkan fungsi tema berikut:

  • MYTHEME_form_element
  • MYTHEME_textfield
  • MYTHEME_container

Apa yang mungkin ada di balik bidang ini yang tidak muncul ketika saya menggunakan #type = numberatau #type = number_integer, dll?

Ini mungkin ada hubungannya dengan itu:

Membuat bidang Angka (bilangan bulat dan desimal) secara manual dalam kode untuk formulir kustom

Namun saya benar-benar ingin jenis untuk menjadikan "angka" dalam HTML sehingga ponsel pintar menunjukkan dialer angka

Ada ide?

Alex.Barylski
sumber

Jawaban:

13
$form['my_element'] = array(
    '#type' => 'textfield',
    '#attributes' => array(
        ' type' => 'number', // insert space before attribute name :)
    ),
    '#title' => 'My number',
    '#required' => true,
    '#maxlength' => 3
);
Arthur
sumber
Apa yang tidak jelas? "Jenis bidang angka dalam Formulir API" perlu? Definisikan atribut "type" ( dengan spasi ) dalam array #attributes dengan nilai yang diinginkan: angka, tanggal, warna ... hack kotor
Arthur
panjang maks tidak berfungsi
logeshvaran
1
Mengapa harus memiliki ruang?
fritzmg
Ini mengarah ke HTML btw yang tidak valid .:<input type="number" type="text">
fritzmg
5

Anda dapat menginstal dan menggunakan Elemen modul untuk itu.

kala4ek
sumber
Ini adalah cara yang benar untuk mendapatkan bidang angka HTML5.
Menguraikan
1
#type="numberfield"adalah cara yang benar untuk menyesuaikan bidang saat menggunakan modul ini.
YPCrumble
1
Modul ini sudah termasuk dalam inti dalam Drupal 8. Cara yang benar untuk membuat bidang angka adalah dengan menggunakan '#type' => 'number'(tidak 'numberfield') dalam array render.
fritzmg
2

Saya agak terlambat ke pesta. Masalahnya adalah bahwa theme_textfield (D7 includes/form.inc:, lines 3924ff) kode-keras $element['#attributes']['type'] = 'text';.

Anda dapat membungkus panggilan tersebut dalam if (!isset($element['#attributes']['type'])) { ... }atau menunggu tambalan https://www.drupal.org/node/2545318 untuk diterapkan.

Skynet
sumber
1

ini kode kamu di bawah ini ..

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

tolong beri tahu saya apa itu ['nomor telepon'], itu adalah wadah atau tidak atau itu ada di formulir Anda atau tidak dan jika Anda ingin membuat bidang khusus di formulir Anda, maka Anda harus menggunakan hook_form_alter hook_form_alter

Suka

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

semoga ini membantu kamu ..

Kamal Oberoi
sumber
0

Saya tidak melihatnya bekerja dengan nilai yang tidak valid untuk bidang #type , namun Anda dapat melakukan sesuatu seperti itu:

Elemen bentuk:

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

Dan mengimplementasikan theme_textfield

if(isset($element['#attributes']['data-type']) && $element['#attributes']['data-type'] === 'number'){
    $output = '<input type="number" />';
}else{
    $output = '<input' . drupal_attributes($element['#attributes']) . ' />';
}
Victor Lazov
sumber
Saya memikirkan hal yang sama untuk solusi - tetapi apa maksud Anda itu tidak akan berfungsi dengan nilai # yang tidak valid ???
Alex.Barylski
Baik jika Anda tidak memberikan nilai yang valid untuk #type elemen form tidak akan dirender sama sekali, seperti yang Anda nyatakan sebelumnya.
Victor Lazov