Newsletter: после подписки не переходить на главную

Рейтинг: 1Ответов: 1Опубликовано: 10.10.2014

Добрый день! Есть Drupal и модуль Newsletter для подписки. Когда пользователь вводит свой адрес, потом переходит на страницу, где есть форма ввода персональной информации, после ввода и отправки персональной информации его (пользователя) перебрасывает на главную страницу сайта, где есть сообщение, что письмо с дальнейшими инструкциями отправлено.

Все бы хорошо, но мне нужно, чтобы этого перехода на главную страницу не было, т.е. убрать этот редирект.

Пересмотрел весь модуль, но никак не смог разобраться, как это сделать. Может, там какой-то хук нужно написать или как?

Заранее большое спасибо за помощь!

Ответы

▲ 2Принят
function ИМЯМОДУЛЯ_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'newsletter_subscribe_form') {
    $form['newsletter-submit']['#ajax']['callback'] = 'ИМЯМОДУЛЯ_newsletter_subscribe_form_submit';
  }
}

function ИМЯМОДУЛЯ_newsletter_subscribe_form_submit($form, &$form_state) {
  $current_path = parse_url($_SERVER['HTTP_REFERER']);
  $path = ltrim($current_path['path'], '/');
  $is_ajax = isset($form_state['input']['ajax_page_state']);

  if (isset($form_state['values']['logged-in'])) {
    global $user;
    $mail = $user->mail;
  }
  elseif (!isset($form_state['values']['logged-in'])) {
    $mail = ($form_state['values']['email'] != t('user@example.com'))
      ? $form_state['values']['email']
      : '';
  }

  if (!valid_email_address($mail) || newsletter_is_subscribed($mail)) {
    $msg = t("This e-mail doesn't exist or you have already subscribed");
    return $is_ajax ? '<div id="newsletter-error">' . $msg . '</div>' : drupal_set_message($msg, 'warning');;
  }

  $q = array(
    'destination' => $path,
    'email' => $mail,
  );
  $url = url('newsletter/subscribe', array('query' => $q));
  if ($is_ajax) {
    return "<script type='text/javascript'>
        location.href='$url'
      </script>";
  }

  drupal_goto('newsletter/subscribe', array('query' => $q));
}

Этот код будет перенаправлять на страницу, с которой пользователь перешел на форму подписки.

P.S. ИМЯМОДУЛЯ заменить в 3 местах на имя своего модуля, можно прописать и в template.php темы.