web-dev-qa-db-ja.com

Webformで検証された値をユーザーのプロファイルページに渡す方法は?

Drupal 7のWebサイトには何百人ものユーザーがいます。プロファイルに各ユーザーの誕生日の値を手動で入力したくないので、ユーザーがユーザーのお誕生日。

この値は、現在のユーザーによる検証後、空の誕生日フィールドを作成したユーザーのプロファイルに永続的に保存されます。

値を渡すにはどうすればよいですか?

5
Vasmir

" Webform Rules "モジュールを使用すると、 Rules モジュールに「Webform submited」のようなイベントに反応させることができるはずです。このルールイベントを使用してカスタムルールを作成し、必要なルールアクションを追加します。これらのルールアクションの青写真は次のとおりです。

  • Fetch Entity by idフォームを送信したユーザー(=現在のユーザー)のuidを使用して、userタイプの。
  • Set a data value、その誕生日を保存するユーザーのプロファイルのフィールドの場合、値はフォームに入力された誕生日です。
  • おそらく(100%確実ではない)追加することもできます Save entity、そのフィールドをプロファイルに実際に保存します。

あなたがそれをより良くする直前にそれを作ってください...

しかし、誕生日の値が異なる同じフォームを再度送信するユーザーはどうでしょうか?そうしたくない場合は、次のように Flag モジュールを追加します。

  • フォームを送信した後、ユーザーにフラグを立てます( Rules を使用)。一部のglobalフラグを使用します。
  • 上記の最初のルールを改善し、ルール条件を追加して、ユーザーにまだフラグが付けられていないことを確認します。

PS:この回答はD7に適用されます...

3
Pierre.Vriens

Webフォームを変更して、ユーザーフィールドを更新できます。そのためにはform_alterフックを使用する必要があります。必要に応じて変更できるサンプルコードをいくつか追加しました。

function hook_form_alter(&$form,&$form_state,$form_id)
    {
        if($form_id == 'webform_id')
        {
         $form['#validate'][] = 'hook_form_validate'; //function name
         $form['#submit'][] = 'hook_form_submit'; //function name
        }
    }

function hook_form_validate($form,&$form_state){
        // validate you dob field
}

function hook_form_submit($form,&$form_state){
    global $user;
    $account = user_load($user->uid);
          $edit = array();
        if(!empty($form_state['input']['submitted']['first_name'])){
            $edit['field_dob'] = array(LANGUAGE_NONE => array(array('value' => $form_state['input']['submitted']['dob']))); 
       }
        user_save($account, $edit);
    }

Webform Rules モジュールもご覧ください。

2
DRUPWAY