2012-03-08 120 views
0

我有一种情况,我需要在Drupal 6.x节点上使用JavaScript。我正在查看对PHP函数的JavaScript调用,但我不确定如何执行它,因为我正在执行以下操作:Drupal 6.x使用Javascript来确定用户是否已登录

我有一个从我的Drupal站点提供的Java Applet。我想知道用户是否在x分钟后仍然登录到网站。如果用户没有登录,我需要关闭小程序。如果用户仍然登录,则我再等待x分钟并检查。

我在寻找启动Java Applet的相同页面上运行的代码,我无法更改Applet代码本身。也许有更好的方法,但我想我需要Javascript来执行这个使用Javascript“SetTimeout()”方法进行连续检查。

如何从Javascript中调用Drupal PHP“user_is_logged_in()”函数?

有人可能会推荐一个有助于说明这个过程的教程吗?我已经浏览了许多面向AJAX的教程,认为AJAX是我需要使用的,但是没有找到任何提供我可以涉及到的框架。

谢谢!

回答

-1

那么你需要对自定义模块进行AJAX调用,然后调用php函数并返回结果。

所以,你已经有了,或者以其他方式创建一个自定义模块:

function MODULENAME_menu() { 
    $items = array(); 

    $items['user/logged_on'] = array(
    'title' => 'Ajax logincheck', 
    'page callback' => 'MODULENAME_check_user_status', 
    'access callback' => TRUE, 
    'type' => MENU_CALLBACK 
); 

    return $items 
} 

function MODULENAME_check_user_status($uid) { 
    // Do the lookup/checking 
    // something like: 
    if (user_is_logged_in()) { 
    echo '1'; 
    else { 
    echo $result; 
    } 
    exit(); 
} 

与模块的名称替换MODULENAME,然后做一个jQuery Ajax调用/user/logged_on。这应该返回1或0来告诉你他是否仍然登录。

但我不确定您是否可以通过AJAX调用访问$ GLOBAL ['user'],但值得一试。

编辑:一个例子Ajax调用函数将是这样的:

function checkUserStatus() { 
    $.ajax({ 
     url: "/user/logged_on", 
     complete: validateUser 
    }); 
} 

function validateUser(result) { 
    if (result) { 
     // User is logged in do what you need to do 
    } 
} 

,我猜你会想打电话checkUserStatussetTimeout()方法。

让我知道如果你有什么事?

+0

这让我有一半在那里。基于用户是否登录,我得到的回应结果(真或假)的代码。我似乎无法捕获在Javascript调用结束时返回True或False的结果。我尝试使用Drupal_add_js('myModulename'=>“数组('loggedinstatus'=>'true')),'setting')嵌入结果,但是当我看起来Drupal.settings.myModulename.loggedinstatus不存在在调用PHP之后,它可以在Firebug或w/Javascript代码中使用。有人可能会提供一个JavaScript代码片段来接收来自PHP的变量或结果吗? – 2012-04-15 00:39:14

+0

更新我的答案,一个快速和肮脏的JavaScript答案...我目前无法测试它,但应该给你一个想法做什么... – 2012-04-16 11:48:37

0

不能确定检查x分钟一次,但有一个名为drupal_to_js方法,它允许你一个Drupal变量分配给一个js变量。因此,您可以得到user_is_logged_in()的结果并将其作为一个js变量存储在drupal_to_js()中。

也许这个变量可以设置为一些自定义模块的hook_init()来检查用户的每个页面请求,如果他登录。在PHP中没有我知道的等效settimeout,但也认为这个选项也可以考虑。希望能帮助到你!

相关问题