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を実行します。
シヴァジ

回答:


33

$vars2番目の引数として追加するだけです。

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_tokens登録フォームを呼び出します$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['...
  }
...
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.