Передача аргументов drupal_get_form ()

Как передать аргументы в 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?
}
19 голосов | спросил Citricguy 10 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 10 Sep 2011 03:26:10 +0400 2011, 03:26:10

3 ответа


31

Просто добавьте $vars в качестве второго аргумента.

drupal_get_form('new_form', $vars);

и ...

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

Цитата из drupal_get_form ()

  

... Любые дополнительные аргументы передаются на функции, вызываемые drupal_get_form (), включая уникальную конструктор форм. Например, форма node_edit требует, чтобы объект узла передавался здесь, когда он вызывается. Они доступны для реализации hook_form_alter () и hook_form_FORM_ID_alter () как массив $ form_state ['build_info'] ['args'].

ответил kalabro 10 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 10 Sep 2011 12:19:13 +0400 2011, 12:19:13
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;
}

Остальная часть того, что вам нужно, находится в форме Ссылка API

ответил skwashd 10 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 10 Sep 2011 12:03:49 +0400 2011, 12:03:49
0

У меня была аналогичная проблема, и она была решена с помощью ответа @ kalabro и моего собственного способа справиться с этим.

Итак, в основном у меня есть статическая посадочная площадка, где я использую токены. В hook_tokens я вызываю регистрационную форму через $form = drupal_get_form('user_register_form', 'register-test');.

И, наконец, в hook_form_alter я проверяю, является ли String «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['...
  }
...
}
ответил kwoxer 12 J000000Tuesday16 2016, 12:51:27

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132