Form API'sındaki sayısal alan türü


12

FAPI kullanarak bir forma "sayı" alan türü eklemek çalışıyorum:

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

TYPE değerini "sayı" olarak değiştiriyorum ve alan hiç oluşturulmuyor. Sayı modülü etkindir. Aşağıdaki tema işlevlerini uyguladım:

  • MYTHEME_form_element
  • MYTHEME_textfield
  • MYTHEME_container

Ben kullandığınızda görünmüyor bu alanda arkasında ne olabilir #type = numberveya #type = number_integervb?

Bunun onunla bir ilgisi olabilir:

Özel formlar için kodda elle sayı alanları (tamsayı ve ondalık) oluşturma

Ancak aslında akıllı telefonların sayısal bir çevirici göstermesi için türün HTML'de "sayı" olarak görüntülenmesini istiyorum

Herhangi bir fikir?

Yanıtlar:


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

Net olmayan ne? "Form API'sinde sayısal alan türü" gerekli mi? #Attributes dizisinde "type" ( boşlukla ) niteliğini istediğiniz bir değerle tanımlayın : sayı, tarih, renk ... kirli kesmek
Arthur

maksimum uzunluk çalışmıyor
logeshvaran

1
Neden bir alana sahip olmak gerekiyor?
fritzmg

Bu geçersiz HTML <input type="number" type="text">
btw'ye

5

Bunun için modül Elemanları kurabilir ve kullanabilirsiniz .


Bu, HTML5 sayı alanını almanın doğru yoludur.
deşifre etme

1
#type="numberfield"bu modülü kullanırken alanı ayarlamak için doğru yoldur.
YPCrumble

1
Bu modül Drupal 8'deki çekirdeğe zaten dahil edilmiştir. Sayı alanı oluşturmanın doğru yolu, oluşturma dizisinde '#type' => 'number'(değil 'numberfield') kullanmaktır .
fritzmg

2

Partiye biraz geç kaldım. Sorun şu ki, theme_textfield (D7:, includes/form.incsatır 3924ff) sabit kodları $element['#attributes']['type'] = 'text';.

Söz konusu çağrıyı bir pakete sarabilir if (!isset($element['#attributes']['type'])) { ... }veya https://www.drupal.org/node/2545318 düzeltme ekinin uygulanmasını bekleyebilirsiniz .


1

bu aşağıdaki kodunuz ..

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

lütfen bana ['phone_number'] ne olduğunu söyle, bu bir kap ya da değil ya da formunda var ya da değil ve formunda özel alan oluşturmak istiyorsan hook_form_alter kullanmalısın hook_form_alter

sevmek

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

Umarım bu yardım eder ..


0

Ancak #type alanı için geçersiz değer ile çalışma görmüyorum , ancak böyle bir şey yapabilirsiniz:

Form öğesi:

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

Ve theme_textfield uygulaması

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

Aynı şeyi bir çözüm için düşünüyordum - ama bunun anlamı geçersiz bir #value ile çalışmayacak mı ???
Alex.Barylski

Eğer için geçerli bir değer koymayın Eh eğer #type daha önce belirtildiği gibi form elemanı, hiç render edilmeyecektir.
Victor Lazov
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.