web-dev-qa-db-ja.com

Drupal 7で連絡先フォームにフィールドを追加する方法は?

連絡先フォームに電話フィールドと会社フィールドを追加したい。 template.phpのフォームを上書きする方法ありがとうございました

6
250091017

このモジュール http://drupal.org/project/contact_field はあなたがやりたいことをするでしょう、そして私はD6以来それについて知っていますが、最後にD7でそれを試したときはバグがありました。

これまでのところ、チャームのように常に機能することがわかっている最良の代替策は、webformモジュール http://drupal.org/project/webform です。必要に応じてフィールドを追加または削除できるからです。それとメールサポートはうまく機能し、メールサーバーまたはサービスが何らかの理由でダウンした場合に備えて、すべての連絡先の試行を保存するボーナスも得られます。

2
Emil Orol

hook_form_alter() を使用して、これら2つのフィールドを連絡先フォームに追加してみませんか?

function MYMODULE_form_alter( &$form, &$form_state, $form_id ) {
    if( $form_id == 'contact_site_form' ){
        $form['message']['#weight'] = 2;
        $form['copy']['#weight']    = 3;
        $form['phone'] = array(
            '#type' => 'textfield',
            '#title' => t('Phone'),
            '#required' => TRUE,
            '#weight' => 1
        );
        $form['company'] = array(
            '#type' => 'textfield',
            '#title' => t('Company'),
            '#required' => TRUE,
            '#weight' => 1
        );
    }
}

hook_mail_alter() を使用して、連絡先メールを変更できます。変数$message['params']には、送信されたフォームの値が含まれます。

/**
 * Implementation of hook_mail_alter
 * Override mail structure
*/
function MYMODULE_mail_alter(&$message){
    if($message['id'] == 'contact_page_mail') {
        $language = $message['language'];
        $params   = $message['params'];
        /*
        $message['to'] = $more_receipient;
        $message['subject'] = $subject_overridden;
        $message['body'][0] = $msg_body;
        $message['body'][1] = $param_to_msg_body;
        */
    }   
}
1
Sithu

検討できる次のモジュールがあります。

  • お問い合わせフォーム

    これにより、サイト全体のお問い合わせフォームの機能が拡張されます。見栄えの良いお問い合わせフォームを生成することで、ドロップダウンカテゴリメニューを削除します。

  • お問い合わせフォームのフィールド

    ただし、それは最小限に維持され、7.xでの作業が必要であり、まだプロダクションの準備ができていません。 fixes を使用して私のフォークを見つけてください。ただし、それでも完全には機能しません。


または、これはDrupal API:

/**
 * Implements of hook_FORM_ID_form_alter().
 */
function foo_form_contact_site_form_alter(&$form, &$form_state, $form_id){
    $form['location'] = array(
        '#title' => t('Your location'),
        '#type' => 'textfield',
        '#required' => TRUE,
        );

    $order = array('name', 'mail', 'subject','location', 'cid', 'message', 'copy', 'actions');

    foreach($order as $key => $field) {
        $form[$field]['#weight'] = $key;
    }
}

/**
 * Implements of hook_mail_alter().
 * This is where the mail being sent if edited. I just add it the the end of the message
 */
function foo_mail_alter(&$message) {

    if ($message['id'] == 'contact_page_mail'){

        $message['body'][] .= t('This is their location - ').$message['params']['location'];
    }
}

ソース: contact_add_fields.module at GitHub

1
kenorb