将参数传递给drupal_get_form()


19

如何drupal_get_form()在Drupal 7中将参数传递给?

function new_menu_callback() {
  $vars = some_example_function(); // returns: array(1 => 'one', 2 => 'two');
  $output = $vars[2];
  $output .= drupal_render(drupal_get_form('new_form'));
}

function new_form($form, &$form_state) {
  // How can I access $vars[1] from new_menu_callback() here?
}

4
有很多例子。从drupal根目录为drupal_get_form运行grep。
西瓦吉

Answers:


33

只需添加$vars为第二个参数即可。

drupal_get_form('new_form', $vars);

和...

function new_form($form, &$form_state, $vars) {
// ...

引用来自drupal_get_form()

...任何其他参数都传递给drupal_get_form()调用的函数,包括唯一的表单构造函数。例如,node_edit表单要求在调用节点对象时将其传入此处。这些可以作为$ form_state ['build_info'] ['args']数组用于hook_form_alter()和hook_form_FORM_ID_alter()的实现。


3

传递给您的其他参数drupal_get_form()可用$form_state['build_info']['args'],但您不能在其中调用函数page arguments。我建议采用以下方法:

function mymodule_menu() {
    $items = array();
    $items['mymodule/example'] = array(
      'page callback' => 'drupal_get_form',
      'page arguments' => array('mymodule_form'),
    );
    return $items;
}


function mymodule_form($form, &$form_state) {
  // this function now uses dev/user friendly named keys
  $vars = mymodule_example_function();
  $form = array();

  $form['heading'] = array(
    '#markup' => check_plain($vars['heading']),
  );

  // use other arguments here

  return $form;
}

您需要的其余内容在Form API参考中


当不需要$ form_state时(即,最初呈现表单时),该函数应代替drupal_build_form()使用,并且通常用作菜单回调。 api.drupal.org/api/drupal/includes!form.inc/function/…–
khaled_webdev

0

我有一个类似的问题,它由@kalabro的答案和我自己的处理方式共同解决。

因此,基本上,我有一个使用令牌的静态登录页面。在hook_tokensI中,我通过调用注册表$form = drupal_get_form('user_register_form', 'register-test');

最后,在hook_form_alter中,检查字符串是否为“ register-test”。这是通过完成的$form_state['build_info']['args'][0]。这里的功能:

function hook_form_user_register_form_alter(&$form, &$form_state, $form_id) {
...
if ($form_state['build_info']['args'][0] == 'register-test') {
    // manipulate the form as usual
    $form['...
  }
...
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.