Wie drucke ich Ergebnisse nach dem Absenden eines Drupal-Formulars?


9

Ich habe ein einfaches Drupal-Modul-Setup mit einem einzigen Textfeld.

Ich kann zurückgeben, was in das Textfeld eingegeben wurde, indem ich drupal_set_message():

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

Allerdings echo $username;wird bei mir nicht funktioniert, wird nichts gedruckt. Wie kann ich Ergebnisse ohne Verwendung zurückgeben drupal_set_message()?

Antworten:


7

Der normale Weg, dies zu handhaben, besteht darin, einen mehrstufigen Workflow zu implementieren. Sehen Sie drupal_rebuild_form()für weitere Informationen, aber im Grunde legen Sie $form_state['rebuild'] = TRUE;in Ihrem einreichen Handler, und in der ursprünglichen Form Funktion fügen Sie eine Überprüfung, ob die Form der vorgelegt. Wenn dies der Fall ist, haben Sie Zugriff auf die übermittelten Werte und können das Formular nach Belieben bearbeiten.

Ein sehr einfaches Beispiel:

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

Ein Formularübermittler kann eine Nachricht nur mit drucken drupal_set_message()oder eine Nachricht in das Protokoll mit schreiben watchdog().

Die Alternative besteht darin, die erforderlichen Daten in der Sitzung zu speichern und den Benutzer (mithilfe $form_state['redirect'] = 'page path';) auf eine Seite umzuleiten, auf der der Inhalt der Sitzung angezeigt wird.

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

Als Randnotiz muss das erste Argument von t()eine Literalzeichenfolge sein, keine Zeichenfolge, die wie in Ihrem Fall zwei Zeichenfolgen verkettet. Sie sollten Platzhalter wie im folgenden Code verwenden.

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

In Drupal 7 können Sie anstelle einer Zeichenfolge ein Render-Array zurückgeben .


1

Alle übermittelten Daten werden in gespeichert $form_state, wenn Sie sehen möchten, was passiert, installieren Sie das Entwicklungsmodul und nachdem Sie dies immer tun können:

Innerhalb Ihrer firstmodule_form1_submitFunktion zum Drucken des gesamten Array- $form_stateTyps - dpm($form_state)- und Sie werden eine Ausgabe sehen, in der Sie Ihren Textfeld-Benutzernamen oder einen anderen finden können$form_state['values']['username']

Und dann können Sie es einfach ausdrucken drupal_set_message(t($form_state['values']['username']);


Danke, ich habe diesen Teil, aber drupal_set_message gibt ihn als "Help Message" -Typ zurück. Ich möchte viele Inhalte auf der Seite selbst zurückgeben.
h00j

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.