2009-08-20 81 views
1

目前,如果下面的代码被执行:强制“drupal_set_message”消息立即显示?

drupal_set_message("TEST"); 

只有当一个页面刷新,将信息显示在页面上。

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

并且不,我不想通过将“error”div设置为我想要的任何值来手动执行此操作。我使用的是消息效果,因此需要插入drupal的方式,以便将消息显示为Drupal。

有人吗?

+0

我已经更新了我的答案,虽然你可能不喜欢你的追求结果。 – googletorp 2009-08-20 20:46:18

回答

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. 通过运行一个简单的JS是针对在页面加载时,因此即使它可能得到的Drupal更新页面已创建邮件,打印新邮件Messagefx功能,他们不会得到messagefx的影响。

你可以像我已经解释的那样完成你的目标,我可能稍微修改它以适应和优化你在这里写的内容。但是,如果不执行jQuery的append(),prepend()函数之类的操作,则无法获得新消息。所以,我担心你必须决定像我描述的那样做,或者根本不这样做。

另外你需要考虑的一件事是,无论你是通过js还是通过drupal制作/输入html,对于最终结果都无关紧要:用html编写的页面。

+0

我想这样做的原因如下:用户将更改模块中的设置,然后这些设置不会反映在我的代码中。我希望将它全部集中并使其能够使插件中的更改反映在页面本身上。如果我只是简单的JavaScript,那么是的,没有ajax会更快,但不幸的是,它不是。 – coderama 2009-08-20 17:29:45

+0

p.s.抱歉,重复,但一旦一个问题没有答案,人们认为它已经解决了。所以我想也许让我的问题更准确可能会得到回应。 – coderama 2009-08-20 17:30:31

+0

@RD。我的经验是,编辑你的问题,使其更精确确实会带来更多的读者,而要求一个新的更精确但重复的问题往往会导致其中一个问题关闭。 – Shawn 2013-01-10 20:47:40

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

除非我错了,但是您必须设置错误div或以某种方式显示它们。

编辑后评论:

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

你应该能够调用的主题()在适当的PARAMS每一个路过触发所有Drupal的钩子,它会返回你放置到页面正确的HTML。调用主题会像它们通常出现在页面上那样对它们进行格式化,就好像它们是从您的主题打印的一样,尽管它们不会在page.tpl.php中进行任何额外的更改。

+0

认为你误解了。我有一个ajax调用,通过页面a从页面b调用drupals_set_messages。在页面b被调用后,未改变。在页面上,我需要某种类型的JAVASCRIPT调用,以在页面a上显示会话中的消息。那有意义吗? – coderama 2009-08-20 15:41:49

+0

O ...我在那里看到你只是告诉我让他们。我知道。我可以得到它们。我只想通过调用INTERNAL DRUPAL FUNCTIONS将它们显示在屏幕上来显示它们。必须有drupal所做的一些事情来显示屏幕上的错误消息。我的问题是什么? – coderama 2009-08-20 15:43:07

+0

我编辑了我的帖子以解决注释 – McAden 2009-08-20 15:54:08

1

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

意见做这样的:

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

如果您打印在你的Ajax回调取决于你的代码的特殊性。