Как заставить Drupal перенаправлять на страницы после регистрации пользователя - PullRequest
3 голосов
/ 13 апреля 2011

У меня есть веб-сайт Drupal, и я хочу показать разные страницы приветствия, в зависимости от того, что мои пользователи вводят в качестве полей профиля. Я не могу использовать глобальную переменную $ user, потому что пользователи не входят в систему автоматически (они должны указать свой адрес электронной почты, прежде чем они смогут войти).

Где я могу добавить код для установки перенаправления? Я пытался использовать $ form ['# redirect'] и $ form_state ['redirect'] в валидаторе формы, но это не сработало.

Ответы [ 3 ]

10 голосов
/ 13 апреля 2011

Вы можете использовать logintobogan для вдохновения:

#implementation of hook_user
mymodule_user($op) { 
  if ($op == 'login') {
    $_REQUEST['destination'] = '/user/will/be/redirected/here'
  }
}

Важно убедиться, что к тому моменту, когда в user.module вызывается финальный drupal_goto(), вы установили свой $_REQUEST['destination'].

Несколько замечаний:

  1. Logintoboggan имеет много кода для работы со всевозможными крайними случаями, такими как перенаправление / на https. Вы можете игнорировать их, если ваш случай прост.
  2. Ваш модуль должен вызываться после user.module и, возможно, после других модулей, реализующих hook_user, поскольку они также могут изменить этот global . Очень уродливо, но как это работает в Drupal.
  3. Не выпускайте drupal_goto() в любом крючке. Особенно не hook_user или hook_form_alter. drupal_goto запрещает вызывать другие хуки; по крайней мере нарушая функциональность, но часто портя вашу базу данных.
  4. Не вводите drupal_goto() в обратных вызовах form_alter, таких как "_submit", это может сломать многие другие модули и даже повредить вашу базу данных.
1 голос
/ 17 апреля 2011

Аналогично ответу Берке, но кажется, что вы просто хотите, чтобы это было единоразово. Для этого вы можете проверить свойство $ account-> access, чтобы проверить их последний вход в систему. Если это 0, то они входят в систему в первый раз.

Это должно работать нормально для электронной почты или без проверки электронной почты.

<?php
/**
 * Implements hook_user().
 */
function mymodule_user($op, &$edit, &$account, $category = NULL) {
  switch ($op) {
    case 'login':
      // execute this if they have never accessed the site before
      if ($account->access == 0) {
        // run conditional logic based on profile fields
        // to set destination here
        $_REQUEST['destination'] = 'path/to/welcome-page';
      }
      break;
  }
}
?>
0 голосов
/ 13 апреля 2011

Я предлагаю вам использовать модуль Логин Destionation или использовать модуль Правила Перенаправление , которое может быть надежным для вашей цели.

На всякий случай, если вы не хотите писать свой собственный модуль: -)

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