Тип числового поля в API форм


12

Я намагаюся додати тип поля "число" до форми за допомогою FAPI:

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

Я змінюю ТИП на "число", і поле взагалі не генерується. Модуль числення увімкнено. Я реалізував такі функції теми:

  • MYTHEME_form_element
  • MYTHEME_textfield
  • MYTHEME_container

Що може стояти за цим полем, не відображаючись при використанні #type = numberабо #type = number_integerтощо?

Це може мати щось спільне з цим:

Створення полів чисел (цілих і десяткових) вручну в коді для користувацьких форм

Однак я дійсно хочу, щоб тип відображав як "число" в 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 API " ? Визначте атрибут "type" ( з пробілом ) у масиві #attributes з потрібним значенням: число, дата, колір ... брудний злом
Arthur

Максимальна довжина не працює
logeshvaran

1
Чому не має місця?
fritzmg

Це призводить до недійсного HTML btw .:<input type="number" type="text">
fritzmg

5

Ви можете встановити і використовувати для нього модуль Elements .


Це правильний спосіб отримати числове поле HTML5.
Розшифровка

1
#type="numberfield"це правильний спосіб коригування поля при використанні цього модуля.
YPCrumble

1
Цей модуль вже включений до ядра в Drupal 8. Правильний спосіб створити числове поле - це використовувати '#type' => 'number'(не 'numberfield') в масиві візуалізації.
fritzmg

2

Я трохи запізнююся на вечірку. Проблема полягає в тому, що includes/form.incжорсткі коди theme_textfield (D7:, рядки 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'], це контейнер чи ні, чи він існує у вашій формі, чи ні, і якщо ви хочете створити у своїй формі користувацьке поле, тоді вам слід використати гачку_форма_алтер гак_форма_алтер

подобається

  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, елемент форми взагалі не буде відображатися, як ви заявляли раніше.
Віктор Лазов
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.