web-dev-qa-db-ja.com

drupal_mailで変数を渡す

フォーム付きのカスタムモジュールがあり、form_stateからの値を電子メールに渡したいです。これは私のコードです。

//The form page callback
function mymodule_page($form, &$form_state) {
    $form['name'] = array(
        '#type' => 'textfield',
        '#title' => t('Enter name here'),
    );
    $form['surname'] = array(
        '#type' => 'textfield',
        '#title' => t('Enter surname here'),
    );
    $form['submit'] = array(
        '#type' => 'submit',
        '#value' => t('Submit'),
        '#submit' => array('mymodule_submit'),
    );

    return $form;
}

function mymodule_submit($form, &$form_state) {
    $name = $form_state['values']['name']; 
    drupal_mail('mymodule', 'mymodule_mail', 'myemail', language_default(), array($name));
    dpm($form_state);
}

/**
 * Implements hook_mail().
 */
function custom_test_mail($key, &$message, $params) {
    switch($key) {
        case 'mymodule_mail':

        $message['subject'] = t('Hello');
        $message['body'][] = t('This is a body text');

        break;
    }
}

件名と本文が記載されたメールを受信して​​いますが、$ form ['name']の値がありません。

フォームフィールドから値を渡すにはどうすればよいですか?

5
user2519032

既に$nameをパラメータとして使用しますが、実際には本文に挿入しないため、メールには表示されません。

次のように、名前でパラメータを簡単に参照できるように、キー配列を使用することをお勧めします。

$params = array('name' => $name);
drupal_mail('mymodule', 'mymodule_mail', 'myemail', language_default(), $params);

...

$message['body'][] = t('This is a body text');
$message['body'][] = t('Name: @name', array('@name' => $params['name']));
6
Clive