Come posso stampare i risultati dopo aver inviato un modulo Drupal?


9

Ho una semplice configurazione del modulo Drupal che ha una singola casella di testo.

Posso restituire ciò che è stato digitato nella casella di testo usando drupal_set_message():

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

Tuttavia echo $username;non funzionerà per me, non viene stampato nulla. Come posso restituire risultati senza usare drupal_set_message()?

Risposte:


7

Il modo normale di gestirlo è implementare un flusso di lavoro in più passaggi. Vedere drupal_rebuild_form()per ulteriori informazioni, ma fondamentalmente si imposta $form_state['rebuild'] = TRUE;nel gestore di invio e nella funzione di modulo originale aggiungere un controllo per vedere se il modulo è stato inviato. In tal caso, hai accesso ai valori inviati e puoi manipolare il modulo come ritieni opportuno.

Un esempio molto semplice:

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

Un gestore di invio moduli può solo stampare un messaggio usando drupal_set_message()o scrivendo un messaggio nel registro con watchdog().

L'alternativa è salvare i dati necessari nella sessione e reindirizzare l'utente (utilizzando $form_state['redirect'] = 'page path';) a una pagina in cui viene mostrato il contenuto della sessione.

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

Come nota a margine, il primo argomento di t()deve essere una stringa letterale, non una stringa ottenuta concatenando due stringhe, come nel tuo caso. È necessario utilizzare segnaposto, come nel codice seguente.

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

In Drupal 7, invece di restituire una stringa, è possibile restituire un array di rendering .


1

Tutti i dati inviati vengono archiviati $form_state, se vuoi vedere cosa succede installa il modulo di sviluppo e dopo puoi sempre fare così:

All'interno della tua firstmodule_form1_submitfunzione per stampare tutto il $form_statetipo di array - dpm($form_state)- e vedrai l'output, dove puoi trovare il tuo nome utente della casella di testo o qualsiasi altro, sarà qualcosa di simile a questo$form_state['values']['username']

E poi puoi semplicemente stamparlo drupal_set_message(t($form_state['values']['username']);


Grazie, ho quella parte comunque drupal_set_message lo restituisce come una cosa di tipo "Messaggio di aiuto". Vorrei restituire molti contenuti sulla pagina stessa.
h00j,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.