web-dev-qa-db-ja.com

フォームAPIの数値フィールドタイプ

FAPIを使用してフォームに「数値」フィールドタイプを追加しようとしています。

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

TYPEを「number」に変更すると、フィールドがまったく生成されません。番号モジュールが有効になっています。次のテーマ関数を実装しました。

  • MYTHEME_form_element
  • MYTHEME_textfield
  • MYTHEME_container

#type = number#type = number_integerなどを使用すると、このフィールドの背後に何が表示されない可能性がありますか?

これはそれと関係があるかもしれません:

カスタムフォームのコードで手動で数値フィールド(整数と10進数)を作成する

ただし、実際にはタイプをHTMLで「数値」としてレンダリングしたいので、スマートフォンは数値ダイヤラを表示します

何か案は?

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

モジュール Elements をインストールして使用できます。

5
kala4ek

パーティーには少し遅れます。問題は、theme_textfield(D7:_includes/form.inc_、3924ff行目)が_$element['#attributes']['type'] = 'text';_をハードコード化していることです。

上記の呼び出しをif (!isset($element['#attributes']['type'])) { ... }でラップするか、パッチ https://www.drupal.org/node/2545318 が適用されるのを待ちます。

2
Skynet

これは以下のコードです。

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

['phone_number']が何であるかを教えてください。それはコンテナであるかどうか、またはフォームに存在するかどうか、フォームにカスタムフィールドを作成する場合は、hook_form_alter hook_form_alter を使用する必要があります

お気に入り

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

これがお役に立てば幸いです。

1
Kamal Oberoi

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