我想创建一个包含2个不同表单的页面,这些表单使用URL参数。 单独完成此任务的每个部分都很容易解决。我可以在表单上使用URL参数,使用drupal_get_form作为回调:
function mymodule_menu() {
$items['user/%/blah'] = array(
'title' => 'Blah',
'page callback' => 'drupal_get_form',
'page arguments' => array('my_custom_callback', 1),
'access arguments' => TRUE,
);
}
function my_custom_callback($form, &$form_state, $uid) {
// I can use candidateId here now
}
还可以做的是,使用两种形式创建自定义页面回调(不完全确定是否有效)
function mymodule_menu() {
$items['user/%/blah'] = array(
'title' => 'Blah',
'page callback' => 'my_page_callback',
'page arguments' => array(1),
'access arguments' => TRUE,
);
}
function my_page_callback($uid) {
$build = array();
global $user;
//PROBLEM: I can't pass the URL parameters to the separate
//form callbacks
$build['form1'] = drupal_get_form('form1_callback');
$build['form2'] = drupal_get_form('form2_callback');
return $build;
}
因此,如评论中所述,我无法将URL参数传递给单独的表单回调 - 并且他们需要在我的模块中使用此参数。确切地说:我在一个页面上需要2个表单(因为我需要2个不同的提交按钮作为默认按钮),每个都传递一个URL参数。
TL; DR:
基本上,我需要一个包含2个文本输入字段的表单页面,每个字段都应该有一个独立的提交按钮 - 但都应该是其字段上的默认按钮,因此它很容易无需鼠标即可使用,只需填写输入字段&按进入。 应触发该字段的相应按钮。
我不在乎我是否需要1或2个表单,我只需要两个表单上的URL参数。
没有帮助的解决方案:
......和我找到的其他人。
提前致谢。
答案 0 :(得分:0)
你与两个drupal_get_form()函数非常接近。您可以在form_id之后添加一个参数,如:
function testing_forms_callback($user) {
$build = array();
$build['form1'] = drupal_get_form('testing_form_one', $user);
$build['form2'] = drupal_get_form('testing_form_two', $user);
return drupal_render($build);
}
这将允许您将参数传递给要加载的表单。这是完整的代码。
/**
* Implements hook_menu()
*/
function testing_menu() {
$items['user/%user/blah'] = array(
'type' => MENU_CALLBACK,
'title' => 'My Forms',
'page callback' => 'testing_forms_callback',
'page arguments' => array(1),
'access callback' => TRUE,
);
return $items;
}
function testing_forms_callback($user) {
$build = array();
$build['form1'] = drupal_get_form('testing_form_one', $user);
$build['form2'] = drupal_get_form('testing_form_two', $user);
return drupal_render($build);
}
/**
* Form 1.
*/
function testing_form_one($form, $form_state, $user) {
$form['textfield_1'] = array(
'#type' => 'textfield',
'#title' => t('Textfield 1'),
'#default_value' => $user->uid,
);
$form['submit_1'] = array(
'#type' => 'submit',
'#value' => t('Submit 1'),
);
return $form;
}
/**
* Form 2.
*/
function testing_form_two($form, $form_state, $user) {
$form['textfield_2'] = array(
'#type' => 'textfield',
'#title' => t('Textfield 2'),
'#default_value' => $user->name,
);
$form['submit_2'] = array(
'#type' => 'submit',
'#value' => t('Submit 2'),
);
return $form;
}
/**
* Submit handler to process the first textfield.
*/
function testing_form_one_submit($form, &$form_state) {
drupal_set_message(t('called testing_form_submit_one'));
// Do something.
if (isset($form_state['values']['textfield_1'])) {
$form_state['redirect'] = 'user/' . $form_state['values']['textfield_1'];
}
}
/**
* Submit handler to process the second textfield.
*/
function testing_form_two_submit($form, &$form_state) {
drupal_set_message(t('called testing_form_submit_two'));
// Do something.
if (isset($form_state['values']['textfield_2'])) {
$form_state['redirect'] = 'users/' . $form_state['values']['textfield_2'];
}
}