这是以下内容的克隆:https ://drupal.stackexchange.com/questions/47865/how-to-make-a-form-that-captures-a-value-from-request (目前没有答案)
我一直在尝试制作一个表单来捕获从$_REQUEST
.
- 仅当 $_REQUEST 变量存在时才显示字段(完成)
- 用户可以修改字段
- 以任何方式验证该字段
- (修改后的)值被使用
在这种特定情况下,我使用的是一个hook_user
函数,但我希望该解决方案适用于任何 Drupal 表单。
这是我的代码的简化版本,如果用户使用以下 URL 注册,则用户将有一个额外的字段来指定他们有最喜欢的水果:
http://example.com/user/register?fruit=pineapple
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
仍然使用“菠萝”。