目前,如果执行以下代码:
drupal_set_message("TEST");
只有刷新页面后,该消息才会显示在页面上。
我目前处于ajax调用正在执行此方法的情况。因此,当前页面不会改变。所以,我需要一种方法来包含在我的ajax调用中,在调用此方法之后,我必须立即显示错误消息。
不,我不想通过将“error”div设置为我想要的任何值来手动完成。我正在使用消息效果,因此需要插入drupal的方式,以便消息显示为Drupal。
任何?
答案 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()的消息,其中包含有效的动作,原因有两个:
你可以像我解释的那样完成你的目标,我可能会略微改变它以适应和优化你在这里写的东西。但是,如果不执行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回调中打印的位置取决于代码的特殊性。