Drupalを使用していくつかのモバイルフォームを実行していて、結果のHTMLに現在type = "text"が含まれているメールアドレステキストフィールドがあります。代わりにtype = "email"にしたいメールアドレスを入力するときにiOSがより便利なキーボードを表示するようにします。
追加してみました:
"#attributes" => array("type" => "email")
私の分野では、それはDrupalに無視されているようです。これを達成するための正しい方法および/またはサポートされている方法はありますか?
現状では、DrupalコアはすべてのHTML5フォーム要素をサポートしているわけではありません。 Elements モジュールはいくつかのサポートを追加するので、確認してください。
HTML5要素(url、email、search、tel、number、range)
input[type=email]
の要素は組み込み Drupal 8以降 です。それらは(他のHTML5要素およびマークアップとともに) Elements module を介してDrupal 6または7に追加できます。
この回答を書いている時点で、Element-moduleのドキュメントはほとんど見つかりません。彼らは、電子メールのinput要素を取得する方法がD8で行われる方法とは少し異なることを説明していません。 Drupal 7の場合:
/**
* Implements hook_form().
* "For long-lasting relief you can count on!"
*
* hook_form() functions are passed a form-node,
* plus extra state-info if present.
*
* At the end of the function, the form-node should
* be returned to the caller.
*
*/
function mymodule_form($node,&$form_state) {
$node['primary_email'] = array(
'#type' => 'emailfield',
'#title' => t('Submitter'),
); // in Drupal 8, it's '#type' => 'email'
return $node;
}
上記が機能する前に、Elementsモジュールを有効にしてください。また、まだの場合は、次のようにしてフォームにアクセスできるようにすることもできます。
/**
* Implements hook_menu().
* "Money back guarantee!"
*/
function mymodule_menu() {
// create primary menu-entry for module:
$items['mymodule'] = array(
'title' => 'My Very Own Module',
'page callback' => 'mymodule_description',
'access callback' => TRUE,
'expanded' => TRUE,
);
// create menu-entry for form:
$items['mymodule/myform'] = array(
'title' => 'My Very Own Form',
'page callback' => 'drupal_get_form',
'page arguments' => array('mymodule_form'),
'access arguments' => array('Behold, the form.'),
'file' => 'mymodule.module',
);
// ...[maybe add more stuff here]...
return $items;
Elementで利用できる他の要素は、cgit.drupalcode.org/elements/tree/elements.module#n7にリストされています。
フォーム検証ハンドラをフォームに追加する代わりに、検証が必要なフォーム要素に検証ハンドラを追加できます。
$form['email'] = array('#type' => 'textfield','#title' => 'Email','#required' => TRUE,'#element_validate' => array('myelement_email_validate')
);
検証ハンドラは3つの引数を受け取ります。検証されるフォーム要素、$ form_state、およびフォーム要素を含むフォームの$ form配列です。
function myelement_email_validate($element, &$form_state, $form) {$value = $element['#value'];if (!valid_email_address($value)) {form_error($element, t('Please enter a valid email address.'));}}
これは私がそれをした方法です:
$form ['group_coordonnees'] ['field_candid_email'] = array (
'#type' => 'textfield',
'#title' => t ( 'E-mail' ),
'#default_value' => '',
'#required' => TRUE
);
$node->field_candid_email ['und'] [0] ['email'] = $form_state ['values'] ['field_candid_email'];
バックオフィスでメールとして選択されているfield_candid_emailのフィールドタイプ