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을 실행하십시오.
Sivaji

답변:


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_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['...
  }
...
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.