web-dev-qa-db-ja.com

Drupalフォームテキストフィールドにtype = "email"属性を設定する方法

Drupalを使用していくつかのモバイルフォームを実行していて、結果のHTMLに現在type = "text"が含まれているメールアドレステキストフィールドがあります。代わりにtype = "email"にしたいメールアドレスを入力するときにiOSがより便利なキーボードを表示するようにします。

追加してみました:

"#attributes" => array("type" => "email")

私の分野では、それはDrupalに無視されているようです。これを達成するための正しい方法および/またはサポートされている方法はありますか?

5
Richard Viney

現状では、DrupalコアはすべてのHTML5フォーム要素をサポートしているわけではありません。 Elements モジュールはいくつかのサポートを追加するので、確認してください。

HTML5要素(url、email、search、tel、number、range)

5
Chapabu

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にリストされています。

6
koyae

フォーム検証ハンドラをフォームに追加する代わりに、検証が必要なフォーム要素に検証ハンドラを追加できます。

 $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.'));}}
1
Suresh

これは私がそれをした方法です:

 $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のフィールドタイプ

0
Matoeil