Jak wydrukować wyniki po przesłaniu formularza Drupal?

9

Mam prostą konfigurację modułu Drupal, która ma jedno pole tekstowe.

Mogę zwrócić to, co zostało wpisane w polu tekstowym, używając drupal_set_message():

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

Jednak echo $username;nie będzie dla mnie działać, nic nie jest drukowane. Jak mogę zwrócić wyniki bez użycia drupal_set_message()?

h00j
źródło

Odpowiedzi:

7

Normalnym sposobem radzenia sobie z tym jest wdrożenie wieloetapowego przepływu pracy. Zobacz, drupal_rebuild_form()aby uzyskać więcej informacji, ale zasadniczo ustawiasz $form_state['rebuild'] = TRUE;w module obsługi przesyłania, aw funkcji formularza oryginalnego dodaj zaznaczenie, aby sprawdzić, czy formularz został przesłany. Jeśli tak, masz dostęp do przesłanych wartości i możesz manipulować formularzem według własnego uznania.

Bardzo prosty przykład:

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;
}
Clive
źródło
2

Moduł obsługi przesyłania formularzy może wydrukować wiadomość tylko za pomocą drupal_set_message()lub zapisując wiadomość w dzienniku za pomocą watchdog().

Alternatywą jest zapisanie niezbędnych danych w sesji i przekierowanie użytkownika (za pomocą $form_state['redirect'] = 'page path';) na stronę, na której wyświetlana jest zawartość sesji.

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

Na marginesie, pierwszy argument t()musi być ciągiem literalnym, a nie ciągiem łączącym dwa ciągi, jak w twoim przypadku. Powinieneś użyć symboli zastępczych, jak w poniższym kodzie.

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

W Drupal 7 zamiast zwracać ciąg, możesz zwrócić tablicę renderującą .

kiamlaluno
źródło
1

Wszystkie przesłane dane są przechowywane $form_state, jeśli chcesz zobaczyć, co się stanie, zainstaluj moduł programistyczny i po tym zawsze możesz to zrobić w następujący sposób:

Wewnątrz firstmodule_form1_submitfunkcji drukowania wszystkich $form_statetypów tablic - dpm($form_state)- zobaczysz dane wyjściowe, w których możesz znaleźć swoją nazwę użytkownika w polu tekstowym lub dowolną inną, będzie coś podobnego do tego$form_state['values']['username']

A potem możesz po prostu wydrukować drupal_set_message(t($form_state['values']['username']);

Petro Popelyshko
źródło
Dzięki, mam tę część, jednak drupal_set_message zwraca ją jako coś w rodzaju „Wiadomość pomocy”. Chciałbym zwrócić wiele treści na samej stronie.
h00j
0

Musisz mieć wywołanie zwrotne menu, w zasadzie byłaby to strona, którą skonfigurowałeś i wyświetlałeś informacje.

Więcej informacji jest dostępnych tutaj: http://api.drupal.org/api/drupal/include!menu.inc/group/menu/7 i musisz przeczytać więcej o hook_menu ()

Mam nadzieję, że to pomoże, powiedz mi, czy potrzebujesz przykładu.

Chiko
źródło