Drupal 6.x Использование Javascript для определения, вошел ли пользователь в систему. - PullRequest
0 голосов
/ 09 марта 2012

У меня есть ситуация, когда мне нужно использовать JavaScript на узле Drupal 6.x.Я смотрю на вызов JavaScript для функции PHP, но я не совсем уверен, как реализовать это, поскольку я делаю следующее:

У меня есть Java-апплет, обслуживаемый с моего сайта Drupal.Я хочу знать, вошел ли пользователь на сайт через x минут.Если пользователь не вошел в систему, мне нужно закрыть апплет.Если пользователь все еще вошел в систему, то я жду еще x минут и проверяю.

Я ищу код для запуска на той же странице, на которой запущен апплет Java, я не могу внести изменения в апплетсам кодВозможно, есть лучший способ, но я думаю, что мне нужен Javascript для выполнения этой постоянной проверки с использованием метода Javascript "SetTimeout ()".

Как мне вызвать функцию Drupal PHP "user_is_logged_in ()" из Javascript?

Есть ли учебник, который кто-то может порекомендовать, который поможет осветить этот процесс?Я просмотрел несколько AJAX-ориентированных учебников, думая, что AJAX - это то, что мне нужно использовать, но не нашел ни одного, который обеспечил бы структуру, к которой я мог бы обратиться.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 16 апреля 2012

не уверен насчет проверки один раз в x минут, но есть метод с именем drupal_to_js , который позволяет назначать переменную drupal переменной js. Таким образом, вы можете получить результат user_is_logged_in() и сохранить его как переменную js с drupal_to_js().

Возможно, эту переменную можно установить для hook_init() какого-либо пользовательского модуля для проверки на каждом запросе страницы пользователя, если он вошел в систему. В PHP нет эквивалента settimeout, о котором я знаю, но чувствовал, что эта опция также может рассматриваться , Надеюсь, это поможет!

0 голосов
/ 09 марта 2012

Ну, вам нужно было бы сделать 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 на имя вашего модуля, затем сделайте aJax-вызов jQuery для /user/logged_on.Который должен возвращать 1 или 0, чтобы сказать вам, если он все еще вошел в систему.

Однако я не уверен, что вы можете получить доступ к $ GLOBAL ['user'] через AJAX-вызов, но стоит попробовать.

РЕДАКТИРОВАТЬ: Пример функции вызова 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() Метод.

Дайте мне знать, если вам нужно что-нибудь еще ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...