Drupal 7)でdrupal_get_form()
に引数を渡すにはどうすればよいですか?
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?
}
2番目の引数として$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()の実装で使用できます。
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リファレンス にあります
私は同様の問題を抱えていましたが、@ 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['...
}
...
}
_