Принудительное появление сообщений "drupal_set_message"? - PullRequest
1 голос
/ 20 августа 2009

В настоящее время, если выполняется следующий код:

drupal_set_message("TEST");

Сообщение обновляется только после обновления страницы.

В настоящее время я нахожусь в ситуации, когда вызов метода ajax выполняет этот метод. Поэтому текущая страница не меняется. Итак, мне нужен способ включить в мой вызов ajax, что после вызова этого метода, я должен немедленно отобразить сообщение об ошибке.

И нет, я не хочу просто делать это вручную, устанавливая div "error" на любое значение, которое я хочу. Я использую эффекты сообщений и поэтому должен подключиться к тому, как это делает drupal, чтобы сообщения отображались так, как это делает Drupal.

Любой

Ответы [ 3 ]

1 голос
/ 20 августа 2009

Я считаю, что это более или менее дубликат этого вопроса , который вы задали себе, только сформулировали немного точнее. Мой ответ оттуда все еще относится к этому ответу.

В принципе, нет никакой причины проходить через все обручи AJAX, чтобы использовать drupal_set_message, это только замедлит процесс. Использование drupal_set_meesage не заставит модуль messagefx реагировать на вставленный вами HTML, потому что он был сгенерирован из drupal_set_message. Будет намного быстрее и проще генерировать и вводить html непосредственно в ваш javascript без каких-либо вызовов ajax, а затем добавить fx, вызвав соответствующую функцию js.

Edit:

То, что вы спрашиваете, невозможно, вы не можете заставить drupal показывать сообщения от drupal_set_message () с эффектами на лету по двум причинам:

  1. Drupal написан на PHP, поэтому единственный способ получить новый контент на странице с помощью PHP - это перезагрузить страницу или загрузить новую.
  2. Messagefx работает, выполняя простой js, который нацелен на сообщения, которые были созданы при загрузке страницы, поэтому даже если бы можно было заставить drupal обновить страницу, печатая новые сообщения, они не получили бы эффектов от messagefx .

Вы могли бы достичь своей цели, как я объяснил, я, вероятно, немного изменил бы ее, чтобы соответствовать и оптимизировать то, что вы написали здесь. Однако вы не можете выводить новые сообщения на экран, не выполняя что-то вроде функций jQuery append (), prepend (). Поэтому я боюсь, что вы должны решить поступить так, как я описал, или подобным, или не делать это вообще.

Также следует учитывать, что если вы создаете / вводите html через js или через drupal, это не имеет большого значения для конечного результата: страница, написанная на html.

1 голос
/ 29 ноября 2011

Я думаю, что вопрос в том, как представления отображают сообщения, когда вы просматриваете представление или редактируете компонент. Это очень полезно позволяет вам помещать операторы dsm () в код для обработчиков Views и видеть вывод там, где это имеет отношение к отладке.

Views делает это следующим образом:

if ($messages = theme('status_messages')) {
  $display = '<div class="views-messages">' . $messages . '</div>';
}

Где вы печатаете это в вашем обратном вызове ajax, зависит от особенностей вашего кода.

1 голос
/ 20 августа 2009
drupal_get_messages($type = NULL, $clear_queue = TRUE)

Если я не ошибаюсь, хотя вам придется установить div ошибки или отобразить их самостоятельно каким-либо образом.

РЕДАКТИРОВАТЬ после комментария:

OH! Обычно сообщения отображаются при загрузке страницы в page.tpl.php, поэтому вы должны поместить их в div вручную, чтобы они сразу же отображались.

Вы должны иметь возможность вызывать theme () для каждого, передающего соответствующие параметры, чтобы активировать все ловушки drupal, и он вернет правильный HTML, который вы поместили на страницу. Вызывающая тема отформатирует их так, как они обычно отображаются на странице, как если бы они были напечатаны из вашей темы, хотя они не будут иметь никаких дополнительных изменений, которые вы могли бы внести в page.tpl.php.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...