我遇到需要在Drupal 6.x节点上使用JavaScript的情况。我正在查看对PHP函数的JavaScript调用,但我不确定如何实现它,因为我正在执行以下操作:
我有一个从我的Drupal站点提供的Java Applet。我想知道用户是否在x分钟后仍然登录该站点。如果用户未登录,我需要关闭小程序。如果用户仍然登录,那么我再等x分钟并检查。
我正在寻找在启动Java Applet的同一页面上运行的代码,我无法对Applet代码本身进行更改。也许有更好的方法,但我认为我需要Javascript来使用Javascript“SetTimeout()”方法执行此连续检查。
如何从Javascript调用Drupal PHP“user_is_logged_in()”函数?
是否有某人可能会推荐的教程有助于阐明这一过程?我已经查看了许多面向AJAX的教程,认为AJAX是我需要使用的,但没有找到任何提供我可以关联的框架。
谢谢!
答案 0 :(得分:0)
不确定在x分钟内检查一次,但是有一个名为drupal_to_js的方法允许你将一个drupal变量分配给一个js变量。因此,您可以获得user_is_logged_in()
的结果,并将其存储为带drupal_to_js()
的js变量。
也许可以为某个自定义模块的hook_init()
设置此变量,以便在用户登录时检查用户的每个页面请求。我知道PHP中没有相当于settimeout但感觉此选项也可以被考虑。希望它有所帮助!
答案 1 :(得分:-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
替换为您的模块名称,然后对/user/logged_on
进行jQuery ajax调用。哪个应该返回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
}
}
我猜你想用checkUserStatus
方法拨打setTimeout()
。
如果您还有其他需要,请告诉我......