2012-03-08 10 views
0

Drupal 6.xノードでJavaScriptを使用する必要がある状況があります。私はPHP関数のJavaScript呼び出しを見ていますが、私は次のように実装する方法を正確にはわかりません:Drupal 6.x Javascriptを使用してユーザーがログインしているかどうかを確認

私はDrupalサイトからJavaアプレットを提供しています。 x分後にユーザーがサイトにログインしているかどうかを知りたいユーザーがログインしていない場合は、アプレットを終了する必要があります。ユーザーがまだログインしている場合、もう一度x分待って確認します。

Javaアプレットを起動した同じページで実行するコードを探していますが、アプレットコード自体を変更することはできません。おそらくもっと良い方法がありますが、Javascriptの "SetTimeout()"メソッドを使用してこの継続的なチェックを実行するにはJavascriptが必要です。

JavascriptからDrupal PHPの "user_is_logged_in()"関数を呼び出すにはどうすればよいですか?

誰かがこのプロセスを明らかにするのに役立つチュートリアルはありますか?私は、AJAXを使用する必要があると思っていますが、私が関連付けることができるフレームワークを提供しているものは見当たりませんでした。

ありがとうございました!

答えて

-1

さて、あなたはPHPモジュール関数を呼び出して結果を返すカスタムモジュールをAJAX呼び出しで作成する必要があります。

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を作成したカスタムモジュールで

。彼はまだ彼がまだログインしているかどうかを伝えるために1か0を返します。

AJAX呼び出しで$ GLOBAL ['user']にアクセスできるかどうかわかりませんが、試してみる価値があります。

EDIT:例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 
    } 
} 

と私はあなたがsetTimeout()方法でcheckUserStatusを呼び出すしたいと思う推測しています。

+0

これは私のところにあります。ユーザーがログインしている場合に基づいて結果(真または偽)をエコーするコードがあります.Javascriptの呼び出し側でTrueまたはFalseの返された結果をキャプチャできないようです。私はDrupal_add_js( 'myModulename' => "配列( 'loggedinstatus' => 'true'))、 'setting')を使用して結果を埋め込みましたが、Drupal.settings.myModulename.loggedinstatusは存在しません。 PHPの呼び出しの後で、火かき棒で、またはJavascriptコードで。おそらく誰かがPHPから変数や結果を受け取るためのJavaScriptコードスニペットを提供できますか? –

+0

すばやく汚れたjavascriptの答えで私の答えを更新しました...私は現時点でそれをテストすることはできませんが、何をすべきかのアイデアを与えるべきです... –

0

ないx分に一度チェックわから...あなたが何かを必要とするなら、私に知らせていますが、JS変数にDrupalの変数を割り当てることができますdrupal_to_jsという名前のメソッドがあります。したがって、user_is_logged_in()の結果を得て、それをdrupal_to_js()というjs変数として格納することができます。

はおそらく、この変数は、彼がログインしている場合は、ユーザの各ページ要求をチェックするためにいくつかのカスタムモジュールのhook_init()に設定することができます。私の知っているが、このオプションも考えることができると感じたPHPでのsetTimeoutのない同等はありません。それが役に立てば幸い!

関連する問題