Tipo de campo numérico en API de formulario


12

Estoy tratando de agregar un tipo de campo "número" a un formulario usando FAPI:

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

Cambio el TIPO a "número" y el campo no se genera en absoluto. El módulo de número está habilitado. He implementado las siguientes funciones de tema:

  • MYTHEME_form_element
  • MYTHEME_textfield
  • MYTHEME_container

¿Qué podría estar detrás de este campo que no aparece cuando uso #type = numbero #type = number_integer, etc.?

Esto podría tener algo que ver con eso:

Creación de campos numéricos (entero y decimal) manualmente en código para formularios personalizados

Sin embargo, en realidad quiero que el tipo se represente como "número" en HTML para que los teléfonos inteligentes muestren un marcador numérico

¿Algunas ideas?

Respuestas:


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

¿Qué no está claro? ¿ Se necesita "Tipo de campo numérico en el formulario API" ? Defina el atributo "tipo" ( con espacio ) en la matriz de # atributos con un valor deseado: número, fecha, color ... truco sucio
Arthur

longitud máxima no funciona
logeshvaran 05 de

1
¿Por qué necesita tener un espacio?
fritzmg

Esto conduce a un HTML no válido por cierto .:<input type="number" type="text">
fritzmg

5

Puede instalar y utilizar elementos de módulo para ello.


Esta es la forma correcta de obtener un campo de número HTML5.
Descifrar

1
#type="numberfield"es la forma correcta de ajustar el campo cuando se usa este módulo.
YPCrumble

1
Este módulo ya está incluido en el núcleo de Drupal 8. La forma correcta de crear un campo numérico es mediante el uso de '#type' => 'number'(no 'numberfield') en la matriz de representación.
fritzmg

2

Llego un poco tarde a la fiesta. El problema es que theme_textfield (D7:, includes/form.inclíneas 3924ff) codifica $element['#attributes']['type'] = 'text';.

Puede finalizar dicha llamada if (!isset($element['#attributes']['type'])) { ... }o esperar a que se aplique el parche https://www.drupal.org/node/2545318 .


1

este es tu código a continuación ...

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

dígame qué es ['phone_number'], es un contenedor o no o existe en su formulario o no, y si desea crear un campo personalizado en su formulario, debe usar hook_form_alter hook_form_alter

me gusta

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

espero que esto te ayude ..


0

No veo que funcione con un valor no válido para el campo #type , sin embargo, puede hacer algo así:

El elemento de forma:

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

E implementando theme_textfield

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

Estaba pensando lo mismo para una solución, pero ¿qué quieres decir con que no funcionará con un #valor no válido?
Alex.Barylski

Bueno, si no pones un valor válido para el #tipo, el elemento del formulario no se representará en absoluto, como dijiste antes.
Victor Lazov
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.