Drupalフォームの送信後に結果を印刷するにはどうすればよいですか?


9

テキストボックスが1つあるシンプルな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()リテラル文字列でなければならず、2つの文字列を連結して取得した文字列ではありません。次のコードのように、プレースホルダーを使用する必要があります。

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

Drupal 7では、文字列を返す代わりに、レンダー配列を返すことができます


1

送信されたすべてのデータがに保存され$form_stateます。何が起こるかを確認したい場合は、develモジュールをインストールします。その後、常に次のように実行できます。

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.