2012-03-08 61 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,但也認爲這個選項也可以考慮。希望能幫助到你!

相關問題