Drupal 양식을 제출 한 후 결과를 어떻게 인쇄합니까?


9

하나의 텍스트 상자가있는 간단한 Drupal Module 설정이 있습니다.

텍스트 상자에 입력 한 내용을 다음을 사용하여 반환 할 수 있습니다 drupal_set_message().

function firstmodule_form1_submit($form, &$form_state) {
    drupal_set_message(t("The user is $username"));
}

그러나 echo $username;나를 위해 작동하지 않습니다, 아무것도 인쇄되지 않습니다. 사용하지 않고 어떻게 결과를 반환 할 수 drupal_set_message()있습니까?

답변:


7

이를 처리하는 일반적인 방법은 다단계 워크 플로를 구현하는 것입니다. 자세한 drupal_rebuild_form()정보는 기본적으로 $form_state['rebuild'] = TRUE;제출 핸들러에서 설정 하고 원래 양식 함수에서 양식이 제출되었는지 확인하십시오. 있는 경우 제출 된 값에 액세스 할 수 있으며 양식에 맞게 양식을 조작 할 수 있습니다.

매우 기본적인 예 :

function MYMODULE_some_form($form, &$form_state) {
  // If the form has been submitted, output something related to the submission
  if (!empty($form_state['values']['some_field'])) {
    $form['submission'] = array(
      '#markup' => function_to_get_markup_from_value($form_state['values']['some_field'])
    );
  }
  else {
    // Otherwise build the normal form
    $form['some_field'] = array(
      '#type' => 'textfield',
      // ...
    );
  }

  return $form;
}

function MYMODULE_some_form_submit($form, &$form_state) {
  $form_state['rebuild'] = TRUE;
}

2

양식 제출 핸들러는을 사용 drupal_set_message()하거나로 로그에 메시지를 쓰는 메시지 만 인쇄 할 수 있습니다 watchdog().

대안은 필요한 데이터를 세션에 저장하고을 사용하여 사용자를 $form_state['redirect'] = 'page path';세션의 내용이 표시된 페이지로 리디렉션하는 것 입니다.

function firstmodule_menu() {
  $items['the path for your page'] = array(
    'page callback' => 'firstmodule_show_submitted_data';
    // ...
  );

  return $items;
}

function firstmodule_form1_submit($form, &$form_state) {
  $_SESSION['firstmodule_username'] = $username;
  // ...

  $form_state['redirect'] = 'the path for your page';
}

function firstmodule_show_submitted_data() {
  // Populate $result with the string to show.

  return $result;
}

참고로, 첫 번째 인수 t()는 리터럴 문자열이어야하며 두 문자열을 연결하는 문자열이 아닙니다. 다음 코드와 같이 자리 표시자를 사용해야합니다.

drupal_set_message(t("The user is %username", array('%username' => $username)));

Drupal 7에서는 문자열을 반환하는 대신 렌더 배열을 반환 할 수 있습니다 .


1

제출 devel 모듈이$form_state 어떻게되는지 알고 싶다면 항상 다음과 같이 할 수 있습니다.

firstmodule_form1_submit모든 배열 $form_state유형 을 인쇄하는 함수 내부 dpm($form_state)--그리고 텍스트 상자 사용자 이름이나 다른 것을 찾을 수있는 출력이 표시됩니다.$form_state['values']['username']

그런 다음 인쇄 만하면됩니다 drupal_set_message(t($form_state['values']['username']);


고마워, 나는 그 부분을 가지고 있지만 drupal_set_message는 그것을 "도움말 메시지"유형으로 반환한다. 페이지 자체에 많은 콘텐츠를 반환하고 싶습니다.
h00j

0

당신이해야 할 일은 기본적으로 설정하고 정보를 표시하는 페이지 인 메뉴 콜백을 갖는 것입니다.

더 많은 정보는 여기에 있습니다 : http://api.drupal.org/api/drupal/includes!menu.inc/group/menu/7 그리고 당신은 hook_menu ()에 대해 더 읽어야합니다

도움이 되길 바랍니다. 예가 필요하면 말해주세요.

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