Як надрукувати результати після надсилання форми на Drupal?


9

У мене проста установка модуля Drupal, яка має єдине текстове поле.

Я можу повернути те, що було введено у текстове поле, використовуючи 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

Усі подані дані зберігаються в $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, і вам потрібно прочитати більше про kuk_menu ()

Сподіваюся, що це допоможе, скажіть, чи потрібен вам приклад.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.