AJAXによるステータスメッセージ


11

標準のAJAXフレームワークを介してdrupal 7でAJAX呼び出しを行っています。私の問題は、ステータスメッセージがAJAXコールバックによって設定されると、単に失われる(またはページの次のリロード時に表示される)ことです。AJAXコールバックの実行が完了した直後に、ページをリロードせずにステータスメッセージを表示するにはどうすればよいですか?そのためのモジュールはありますか?

回答:


13

ステータスメッセージをレンダリングして、anohter AJAXコマンドとして送信できます。

例えば:

$commands = array();

// Add other commands

$commands[] = ajax_command_prepend('div#ajax-status-messages-wrapper', theme('status_messages'));

return array('#type' => 'ajax', '#commands' => $commands);

少なくともこれは、私が直面したときにこの問題を解決した方法です。


あなたは救い主です!!! :Dありがとうございます。
SGhosh 2015年

そこではtheme( 'status_messages')の使用は何ですか?
aegc 2015

@Bebang Bakikangはステータスメッセージをレンダリングし、現在のステータスメッセージを含むHTMLコードを返します。
sanzante 2015年

8

Drupal 8の場合

$response = new AjaxResponse();    
$status_messages = array('#type' => 'status_messages');
$messages = \Drupal::service('renderer')->renderRoot($status_messages);
if (!empty($messages)) {
  $response->addCommand(new PrependCommand('.your_selector', $messages));
}

return $response;

3

AJAXを使用したDrupal 8フォームの場合、Tim Bozemanによる回答は機能しましたが、メッセージはスタイリングなしで表示されました。これは私のために働いたものです:

$response = new AjaxResponse();
drupal_set_message($action);
$form['messages']['status'] = [
  '#type' => 'status_messages',
];
$response->addCommand(new InsertCommand(null, $form['messages']));

return $response;

0

私のために

$commands[] = ajax_command_remove('div.messages');
$commands[] = ajax_command_after('#main-content', theme('status_messages'));

働いた。#main-contentは標準であり、テーマの実際のメッセージの位置に合わせてカスタマイズする必要がある場合があります。(おそらく、2番目のメソッドをajax_command_append()または別のメソッドに変更する必要があります)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.