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?

Jawaban:


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

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.


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.


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 ..


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']) . ' />';
}

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.