Drupal форма с перенаправлением назначения - PullRequest
0 голосов
/ 21 декабря 2011

Я пытаюсь использовать простую строку кода, но она не работает.С помощью следующего кода:

drupal_goto("user/register?destination=/node/1");

Я отправляю своих посетителей на страницу регистрации, которая после завершения и нажимает кнопку отправки, затем я хочу, чтобы они были перенаправлены на узел / 1.

Проблема в том, что мой реализован в hook_init, и мои сайты переходят в бесконечный цикл.

Кто-нибудь может подсказать, как мне заставить код выполнить один раз или более подходящий крючок друпала для реализации моего кода?

Ответы [ 3 ]

2 голосов
/ 22 декабря 2011

Если вы хотите, чтобы перенаправление происходило именно тогда, когда пользователь отправляет регистрационную форму, вам нужно изменить форму user_register путем реализации hook_form_FORMID_alter и добавления атрибута #redirect, например:

/**
 * Implementation of hook_form_FORMID_alter().
 * @param $form
 * @param $form_state
 * @return void
 */
function MYMODULE_form_user_register_alter(&$form, &$form_state) {
  $form['#redirect'][] = 'node/1';
}

Таким образом, Drupal зарегистрирует пользователя и затем отправит его / ее на node / 1 .

Теперь, если вы хотите, чтобы это произошло послепользователь входит в систему (независимо от того, является ли это входом "после регистрации" или обычным), тогда вы, вероятно, захотите использовать drupal_goto () в реализации hook_user в операции входа в систему (то есть, когда $op == 'login')

1 голос
/ 09 апреля 2013

Я думаю, что добавление этого в ваш template.php сделает это:

    function phptemplate_menu_item_link($link) {
      if ($link['tab_root'] == 'user' && !empty($_GET['destination'])) {
        $link['localized_options']['query'] = drupal_get_destination();
      }
      return l($link['title'], $link['href'], $link['localized_options']);
    }

Я написал сообщение в блоге о том, почему я хотел сделать это здесь: http://tappetyclick.com/blog/2013/04/11/maintain-destination-drupal-user-account-menu#.UWbt8hcmdIE, и в нем тоже есть пара других советов, которые могут помочь

0 голосов
/ 21 декабря 2011

Похоже, вам нужно убедиться, что вы еще не вошли в систему, на узле / 1, в пользователе / ​​регистре или другом неподходящем пути, прежде чем выполнять перенаправление, в противном случае вы просто перенаправляете вслепую, и это приводит к циклу , право? Кроме того, вам также нужно разрешить пользователям входить в систему, верно?

Таким образом, вы можете начать с того, что сначала убедитесь, что пользователь не вошел в систему, и что он еще не находится на пути пользователя для отправки анонимных пользователей на страницу 'user' (или user / register):

  if(($user->uid == 0) && (arg(0) != 'user')){
    drupal_goto('user');
  }

Затем выполните перенаправление node/1, используя hook_user_login() вместо hook_init().

По крайней мере, это то, что имеет смысл для меня, исходя из моего понимания вашего варианта использования.

Вы также можете рассмотреть возможность использования Адресата входа в систему , который имеет стабильные версии D6 и D7.

...