これは次のクローンです: https://drupal.stackexchange.com/questions/47865/how-to-make-a-form-that-captures- a-value-from-request (現在回答なし)
から渡された値を取得するフォームを作成しようとしています$_REQUEST
。
- $_REQUEST 変数が存在する場合にのみ、フィールドが表示されます (done)
- ユーザーはフィールドを変更できます
- フィールドは何らかの方法で検証されます
- (変更された)値が使用されます
この特定のケースでは、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
も、「パイナップル」は引き続き使用されます。