【问题标题】:Forcing "drupal_set_message" messages to appear immediately?强制“drupal_set_message”消息立即出现?
【发布时间】:2009-08-20 15:32:25
【问题描述】:

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

drupal_set_message("TEST");

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

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

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

有人吗?

【问题讨论】:

  • 我已经更新了我的答案,但你可能不喜欢你的任务的结果。

标签: drupal module


【解决方案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 来运行,该 js 以页面加载时创建的消息为目标,因此即使可以让 drupal 更新页面、打印新消息,它们也不会从 messagefx 获得效果.

你可以像我解释的那样实现你的目标,我可能会稍微改变它以适应和优化你在这里写的内容。但是,如果不执行 jQuery 的 append()、prepend() 函数之类的操作,就无法将新消息显示到屏幕上。所以恐怕你必须决定像我描述的那样做或类似的事情,或者根本不做。

您还必须考虑的一件事是,无论您是通过 js 还是通过 drupal 制作/输入 html,对于最终结果并不重要:一个用 html 编写的页面。 p>

【讨论】:

  • 我想这样做的原因如下:用户将更改模块中的设置,然后不会反映在我的代码中。我希望一切都集中起来,以便插件中的更改将反映在页面本身上。如果我只是简单的 javascript,那么是的,没有 ajax 会更快,但不幸的是,它不是。
  • 附注抱歉重复了,但是一旦一个问题几乎没有答案,人们就会认为它已经解决了。所以我想也许让我的问题更准确可能会得到回应。
  • @RD。我的经验是,编辑您的问题以使其更精确确实会吸引更多读者,而提出一个新的更精确但重复的问题往往会使其中一个问题关闭。
  • 这个答案是错误的。查看核心 js 文件,尤其是 core/misc/message.es6.js。您可以在 Drupal 的 js 中做很多事情,包括发布消息。常量消息 = 新 Drupal.Message(); messages.add('测试消息', { type: 'status' });
【解决方案2】:
drupal_get_messages($type = NULL, $clear_queue = TRUE)

除非我弄错了,尽管您必须自己设置错误 div 或以某种方式显示它们。

评论后编辑:

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

您应该能够在每个传入适当参数的参数上调用 theme() 以触发所有 drupal 钩子,它将返回您放入页面的正确 HTML。调用主题将格式化它们,就像它们通常出现在页面上一样,就好像它们是从您的主题打印的一样,尽管它们不会有您在 page.tpl.php 中可能有的任何额外更改。

【讨论】:

  • 认为你误会了。我有一个 ajax 调用,通过页面 b 从页面 a 调用 drupals_set_messages。在页面 b 被调用之后,a 没有改变。在 a 页上,我需要某种类型的 JAVASCRIPT 调用,以在 a 页上的会话中显示消息。这有意义吗?
  • O...我看到你只是告诉我要得到它们。我知道。我可以得到它们。我只想通过调用内部 DRUPAL 函数在屏幕上显示它们来显示它们。 drupal 必须做一些事情,才能在屏幕上显示错误消息。我的问题是什么?
  • 我想这就是你要找的东西:drupal.stackexchange.com/questions/293226/… const messages = new Drupal.Message(); messages.add('测试消息', { type: 'status' });
【解决方案3】:

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

视图是这样的:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多