0

これは次のクローンです: https://drupal.stackexchange.com/questions/47865/how-to-make-a-form-that-c​​aptures- a-value-from-request (現在回答なし)

から渡された値を取得するフォームを作成しようとしています$_REQUEST

  1. $_REQUEST 変数が存在する場合にのみ、フィールドが表示されます (done)
  2. ユーザーはフィールドを変更できます
  3. フィールドは何らかの方法で検証されます
  4. (変更された)値が使用されます

この特定のケースでは、hook_user関数を使用していますが、ソリューションがあらゆる Drupal フォームに適用できることを願っています。

これは、ユーザーが次の URL を使用して登録する場合に、お気に入りの果物があることを指定する追加のフィールドを持つ、私のコードの簡略化されたバージョンです。

http://example.com/user/register?fruit=パイナップル

function fruity_user($op, &$edit, &$user, $category = NULL){
    switch($op) {
        // Add extra fields if $_REQUEST contains values for them
        case 'register':
            if($_REQUEST['fruit'] == 'pineapple'){
                $fields['user_reg_info']['profile_fruit'] = array(
                     '#type' => 'textfield'
                    ,'#description' => 'Your favorite fruit (if applicable)'
                    ,'#locked' => 0
                    ,'#value' => $_REQUEST['fruit']
                );
            }
            return $fields;
            break;

        // check registration for mistakes
        case 'validate':
            if ($edit['form_id'] == 'user_register') {
                if ($edit['profile_fruit']){
                    verify_fruit($edit['profile_fruit']);
                }
            }
            break;

        // runs after the new user is inserted
        case 'insert':
            if($_REQUEST['fruit']){
                db_query('INSERT INTO user_fruits SET `uid`=%d `fruit`="%s"',array($user->uid, $edit['profile_fruit']));
            }

            // record information
            watchdog('user', t('user %user picked out a fruit',array('%user' => $user->name)));
            break;
    }
}

上記のコードでは、$_REQUEST['fruit'] が存在する場合にのみフィールドが表示されますが、フォームで果物を「スイカ」に変更してinsertも、「パイナップル」は引き続き使用されます。

4

2 に答える 2

0

挿入と登録中に2つの異なるキーを使用していると思います。登録で $fields['user_reg_info']['profile_fruit'] を使用し、挿入で $edit['fruit'] を使用しています。両方の場所で ['fruit'] キーを使用してみてください。編集でも同じものを使用します。

于 2012-11-02T10:38:13.730 に答える
0

答えは の#default_value代わりに使用することでし#valueた。

http://api.drupal.org/api/drupal/developer%21topics%21forms_api_reference.html/6#default_value

于 2012-11-07T14:51:33.083 に答える