web-dev-qa-db-fra.com

Type de champ numérique dans l'API Form

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

Que peut-il y avoir derrière ce champ qui n'apparaît pas lorsque j'utilise #type = number ou #type = number_integer, etc?

Cela pourrait avoir quelque chose à voir avec cela:

Création de champs numériques (entier et décimal) manuellement 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?

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

Vous pouvez installer et utiliser le module Elements pour cela.

5
kala4ek

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

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

2
Skynet

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

1
Kamal Oberoi

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