调用的Drupal(Invoking drupal)

2019-09-29 11:36发布

这是一个后续行动: 核心JavaScript功能,使错误,警告或通知消息出现?

基本上, drupal_set_message()在会话中存储的错误信息。 我需要一种方法来告诉Drupal的VIA JAVSCRIPT不显示这些消息。 如果页面被刷新,将显示这些消息,但我希望立刻显示的方式,迫使他们。

Answer 1:

我不知道如果我明白你纠正,但似乎你想要在你的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超全局的消息。

所以回调,将是这个样子

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);
}

其余部分将像第一个解决方案,只有你会得到来自阿贾克斯的HTML代替。



Answer 2:

因为这些信息是在会议和/或DB,你必须使用AJAX我猜。 那不是一个很传统的方法。

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



文章来源: Invoking drupal
标签: drupal