Type de champ numérique dans l'API Form

12

J'essaie d'ajouter un type de champ "numéro" à un formulaire à l'aide de FAPI:

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

Je change le TYPE en "nombre" et le champ n'est pas généré du tout. Le module numérique est activé. J'ai implémenté les fonctions thématiques suivantes:

  • MYTHEME_form_element
  • MYTHEME_textfield
  • MYTHEME_container

Qu'est-ce qui pourrait être derrière ce champ qui n'apparaît pas lorsque j'utilise #type = numberou #type = number_integer, etc.?

Cela pourrait avoir quelque chose à voir avec cela:

Création manuelle de champs numériques (entier et décimal) dans le code pour les formulaires personnalisés

Cependant, je veux que le type soit rendu sous forme de "nombre" en HTML pour que les téléphones intelligents affichent un numéroteur numérique

Des idées?

Alex.Barylski
la source

Réponses:

13
$form['my_element'] = array(
    '#type' => 'textfield',
    '#attributes' => array(
        ' type' => 'number', // insert space before attribute name :)
    ),
    '#title' => 'My number',
    '#required' => true,
    '#maxlength' => 3
);
Arthur
la source
Qu'est-ce qui n'est pas clair? "Type de champ numérique dans l'API Form" est nécessaire? Définissez l'attribut "type" ( avec espace ) dans le tableau #attributes avec une valeur souhaitée: nombre, date, couleur ... bidouille
Arthur
la longueur maximale ne fonctionne pas
logeshvaran
1
Pourquoi faut-il avoir un espace?
fritzmg
Cela conduit à un HTML incorrect:<input type="number" type="text">
fritzmg
5

Vous pouvez installer et utiliser le module Elements pour cela.

kala4ek
la source
C'est la bonne façon d'obtenir un champ numérique HTML5.
Déchiffrer le
1
#type="numberfield"est la bonne façon d'ajuster le champ lors de l'utilisation de ce module.
YPCrumble
1
Ce module est déjà inclus dans le noyau de Drupal 8. La bonne façon de créer un champ numérique est d'utiliser '#type' => 'number'(pas 'numberfield') dans le tableau de rendu.
fritzmg
2

Je suis un peu en retard à la fête. Le problème est que les includes/form.inchard-codes theme_textfield (D7 :, lignes 3924ff) $element['#attributes']['type'] = 'text';.

Vous pouvez encapsuler cet appel dans un if (!isset($element['#attributes']['type'])) { ... }ou attendre que le patch https://www.drupal.org/node/2545318 soit appliqué.

Skynet
la source
1

voici votre code ci-dessous ..

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

s'il vous plaît dites-moi ce qui est ['phone_number'], c'est un conteneur ou non ou son existe dans votre formulaire ou non et si vous voulez créer un champ personnalisé dans votre formulaire, vous devez utiliser hook_form_alter hook_form_alter

comme

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

j'espère que cela vous aide ..

Kamal Oberoi
la source
0

Je ne le vois pas fonctionner avec une valeur non valide pour le champ #type , mais vous pouvez faire quelque chose comme ça:

L'élément de formulaire:

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

Et implémenter 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
la source
Je pensais la même chose pour une solution - mais que voulez-vous dire que cela ne fonctionnera pas avec une valeur # invalide ???
Alex.Barylski
Eh bien, si vous ne mettez pas de valeur valide pour le #type, l'élément de formulaire ne sera pas rendu du tout, comme vous l'avez dit précédemment.
Victor Lazov