Argumente an drupal_get_form () übergeben

19

Wie kann ich drupal_get_form()in Drupal 7 Argumente übergeben ?

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?
}
Citricguy
quelle
4
Dafür gibt es viele Beispiele. Führen Sie ein grep für drupal_get_form aus dem Drupal-Stammverzeichnis aus.
Sivaji

Antworten:

33

Fügen Sie einfach $varsals zweites Argument hinzu.

drupal_get_form('new_form', $vars);

und...

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

Zitat aus drupal_get_form ()

... Alle zusätzlichen Argumente werden an die von drupal_get_form () aufgerufenen Funktionen übergeben, einschließlich der einzigartigen Formularkonstruktorfunktion. Beispielsweise erfordert das Formular node_edit, dass hier ein Knotenobjekt übergeben wird, wenn es aufgerufen wird. Diese stehen Implementierungen von hook_form_alter () und hook_form_FORM_ID_alter () als Array $ form_state ['build_info'] ['args'] zur Verfügung.

kalabro
quelle
3

Die zusätzlichen Argumente, an die Sie übergeben, drupal_get_form()sind in verfügbar $form_state['build_info']['args'], aber Sie können keine Funktionsaufrufe in Ihrem haben page arguments. Ich würde den folgenden Ansatz vorschlagen:

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;
}

Der Rest dessen, was Sie benötigen, befindet sich in der Formular-API-Referenz

skwashd
quelle
Diese Funktion sollte anstelle von drupal_build_form () verwendet werden, wenn $ form_state nicht benötigt wird (dh wenn das Formular zum ersten Mal gerendert wird) und wird häufig als Menü-Rückruf verwendet. api.drupal.org/api/drupal/includes!form.inc/function/…
khaled_webdev
0

Ich hatte ein ähnliches Problem und es wurde mit einer Mischung aus @kalabros Antwort und meiner eigenen Art, damit umzugehen, gelöst.

Im Grunde habe ich eine statische Landingpage, auf der ich Token verwende. Im hook_tokensrufe ich das Anmeldeformular über an$form = drupal_get_form('user_register_form', 'register-test'); .

Und schließlich überprüfe ich im hook_form_alter, ob der String "register-test" ist. Dies geschieht über $form_state['build_info']['args'][0]. Hier die Funktion:

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
quelle