强制立即显示“drupal_set_message”消息?

时间:2009-08-20 15:32:26

标签: drupal module

目前,如果执行以下代码:

drupal_set_message("TEST");

只有刷新页面后,该消息才会显示在页面上。

我目前处于ajax调用正在执行此方法的情况。因此,当前页面不会改变。所以,我需要一种方法来包含在我的ajax调用中,在调用此方法之后,我必须立即显示错误消息。

不,我不想通过将“error”div设置为我想要的任何值来手动完成。我正在使用消息效果,因此需要插入drupal的方式,以便消息显示为Drupal。

任何?

3 个答案:

答案 0 :(得分:1)

drupal_get_messages($type = NULL, $clear_queue = TRUE)

除非我弄错了,否则你必须设置错误div或以某种方式自己显示它。

评论后编辑:

OH!通常,消息显示在page.tpl.php的页面加载中,因此您必须手动将它们放在div中,以便它们立即显示。

你应该能够在传递适当的参数的每一个上调用theme()来触发所有的drupal钩子,它将返回你放入页面的正确的HTML。调用主题会将它们格式化,就像它们通常会在页面上显示一样,尽管它们不会在page.tpl.php中进行任何额外的更改。

答案 1 :(得分:1)

我认为这或多或少是你自问的this question的副本,只是措辞更准确一些。我的回答仍然适用于这个答案。

基本上,没有理由通过所有的AJAX箍来使用drupal_set_message,它只会减慢速度。使用drupal_set_meesage不会让messagefx模块对你插入的html做出反应,因为它是从drupal_set_message生成的。在没有任何ajax调用的情况下直接在javascript中生成和输入html会更快更简单,然后通过调用相关的js函数来添加fx。

修改

你所要求的是不可能的,你不能让drupal显示来自drupal_set_message()的消息,其中包含有效的动作,原因有两个:

  1. Drupal是用PHP编写的,因此使用PHP将新内容添加到页面的唯一方法是重新加载页面或加载新页面。
  2. Messagefx函数通过运行一个简单的js来定位页面加载时创建的消息,所以即使有可能让drupal更新页面,打印新消息,它们也不会从messagefx获得效果
  3. 你可以像我解释的那样完成你的目标,我可能会略微改变它以适应和优化你在这里写的东西。但是,如果不执行jQuery的append(),prepend()函数之类的操作,就无法在屏幕上显示新消息。所以我担心你必须像我所描述的那样或类似地做,或者根本不做。

    你必须考虑的一件事是,无论你是通过你的js还是通过drupal制作/输入html,对于最终结果都不会真正重要:用html编写的页面。

答案 2 :(得分:1)

我认为问题在于预览视图或编辑组件时Views显示消息的方式。这非常有用,允许您将dsm()语句放在View处理程序的代码中,并查看与调试相关的输出。

视图是这样的:

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

在ajax回调中打印的位置取决于代码的特殊性。