调用drupal

时间:2009-08-19 08:59:22

标签: drupal

这是对Core javascript functions to make error, warning or notice messages appear?

的跟进

基本上,drupal_set_message()会在会话中存储错误消息。我需要一种方法来告诉drupal VIA JAVSCRIPT不要显示这些消息。如果页面被刷新,将显示这些消息,但我想要一种强制它们立即显示的方法。

2 个答案:

答案 0 :(得分:2)

我不确定我是否理解你是正确的,但似乎你想对你的javascript中的某些东西作出反应并以drupal风格显示带有效果的信息。

首先要明确一点,JavaScript和Drupal(PHP)无法真正相互通信。唯一的解决方案是通过AJAX,所以想要从你的javascript使用drupal_set_message()没有任何意义。原因是它会非常困难,你最终会得到你需要附加到页面的html。因此,直接在javascript中创建html会更容易,就像我在你的另一个问题的答案中提出的那样。所以剩下的就是追加效果。这实际上并不难,具体取决于你的效果。唯一棘手的部分是从messagefx模块获取设置,这似乎是你目前无法解决的,因为它不会保存脚本变量中的任何设置。

所以代码中的这个解决方案就是这样的:

$("#something").a_trigger(function () {
    $("#messages").append('your html with message').find('the html you inserted').effect(some effect here);
});

根据您想要创建的效果,您可以调用另一个函数,查看messagefx在第55行的模块文件中执行的操作。

另一种可能性是你想对任何drupal_set_message()做出反应。困难的部分是找出何时有消息,因为在javascript中确实没有办法知道。还要考虑大多数消息是提交表单的结果,无论如何页面重新加载,这是不必要的。因此,您首先要创建一个简单的AJAX函数来获取数据,然后创建自己的简单模块来执行此操作。基本上你需要用hook_menu定义一个url,并在该回调中处理ajax。您可以从$ _SESSION super global获取消息。

所以回调看起来像这样

function mymodule_ajax_callback() {
    if (isset($_SESSION['messages'] && !empty($_SESSION['messages'])) {
        $result = array();
        foreach($_SESSION['messages'] as $message) {
            $result[] = 'Generate html based on $message';
        }
        unset($_SESSION['messages']) // Remove the messages so they wont appear twice.
    }
    return drupal_json($result);
}

其余的看起来像第一个解决方案,只有你会从ajax获得html。

答案 1 :(得分:0)

因为这些消息在会话和/或数据库中,所以你必须使用ajax。这不是一个非常传统的方法。

不得不说在我的网站上这个drupal_set_message()函数经常显示消息一页太晚了,所以我感到很痛苦。