БлогЛогин, регистрация и восстановление пароля с помощью AJAX

Есть такой модуль замечательный - называется он Ajax Register. Раньше он работал довольно странно (к тому же для 6го Друпала), и никогда моих потребностей в ajax логине не удовлетворял. Потом я проскочил в ко-разработчики модуля и сделал релиз для Drupal 7. Однако этот релиз был больше заточен под тот проект, для которого я этот модуль писал на самом деле. Поэтому подходил он явно не всем, хотя всё же лучше, чем ничего.

Сегодня я наконец собрался с мыслями и выпустил в свет адекватный релиз Ajax Register 7.x-4.x. Вот его фичи:

  • Форма регистрации, логин и восстановление работают на AJAX. Соответственно, валидация тоже происходит через AJAX, поэтому быстро и красиво.
  • Ссылка на форму регистрации или восстановление пароля в блоке логина открывают формы в попапе.
    ajax_register_1.png
  • Модуль имеет также свой блок с 3мя ссылками (логин, регистрация, восстановление пароля), которые также открывают соответствующие формы в попап-окне.
    ajax_register_2.png
  • Любую из ссылок в блоке из предыдущего пункта можно отключать через настройки блока. Так же ссылки можно расположить в одну строку (хорошо для размещения в хедере страницы, например).ajax_register_3.png
  • Логика работы не нарушается, даже если в браузере пользователя нет поддержки JavaScript. Он просто редиректится на стандартную форму Друпала.
  • Поддерживает работу с капчей!

Для демонстрации работы я создал демо-сайт, на котором вы можете посмотреть модуль в действии. Скачать модуль Ajax Register можно с его официальной страницы.

Комментарии

Аватар пользователя antonegorov
antonegorov написал:

Браво! Спасибо!

12.05.2012 04:04
Аватар пользователя andypost
andypost написал:

Осталось только пофиксить http://drupal.org/node/1575060 вместе с http://drupal.org/node/1414510
И продавить бэкпорт это дело в 7ку

13.05.2012 19:53
Аватар пользователя Spleshka
Spleshka написал:

Да, я тогда наконец уберу из модуля код, который удаляет аватарку из формы регистрации :)

14.05.2012 20:19
Аватар пользователя Spleshka
Spleshka написал:

Кстати, Ctools фиксит баг с multipart формой, я на нём новый релиз сделал - всё работает супер.

17.05.2012 22:25
Аватар пользователя Артур
Артур написал:

А обратный выход с всплывающим окном работает?

14.05.2012 03:26
Аватар пользователя Spleshka
Spleshka написал:

Не понял сути вопроса.

14.05.2012 20:14
Аватар пользователя Dmitry
Dmitry написал:

Спасибо, нужный модуль! Появляющиеся частики бы только убрать. Во-первых, строчки из-за него прыгают. Во-вторых, не нужны они, не так уж долго ждать надо до появления любого окна.

14.05.2012 06:01
Аватар пользователя Spleshka
Spleshka написал:

css вам в помощь

14.05.2012 20:15
Аватар пользователя Иван
Иван написал:

Отличный модуль!
А есть ли способ размещать содержимое а FancyBox?

14.05.2012 09:38
Аватар пользователя Spleshka
Spleshka написал:

Нет. А в чём отличие между попапами?

14.05.2012 20:17
Аватар пользователя Volodymyr
Volodymyr написал:

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

14.05.2012 16:38
Аватар пользователя Spleshka
Spleshka написал:

На самом деле просто - надо вместо формы user_login вызвать форму user_login_block. А вообще, скорее всего в будущем это будет вынесено в настройки.

14.05.2012 20:18
Аватар пользователя Spleshka
Spleshka написал:

Вошло в новый релиз модуля.

17.05.2012 22:25
Аватар пользователя Volodymyr
Volodymyr написал:

спасибо! сейчас попробую.

22.05.2012 10:53
Аватар пользователя Volodymyr
Volodymyr написал:

через ui.dialog смотрелось лучше

22.05.2012 11:20
Аватар пользователя Spleshka
Spleshka написал:

Зато через ctools работает лучше.
А немного добавить стилей вроде не сложно, это должно уместиться в 10 строк.

22.05.2012 11:57
Аватар пользователя Юрий
Юрий написал:

Подскажите а как вставлять ссылку на регистрацию и авторизацию в любое место в шаблоне? или только через блок надо выводить?

05.07.2012 13:31
Аватар пользователя Vladimir
Vladimir написал:

У меня почему-то не работает Ajax окно.

13.07.2012 19:46
Аватар пользователя Василий
Василий написал:

Отличный модуль, спасибо.
Вот только как поместить в это всплывающее окно блоки авторизации через социалки?

13.09.2012 10:48
Аватар пользователя Юрий
Юрий написал:

Приветствую
Подскажите, как вставлять ссылку на регистрацию в любом месте, а не только в блоке что бы она была

спасибо

19.09.2012 09:37
Аватар пользователя Александр
Александр написал:

пишу модуль. по вашему примеру. только форма не в попап а на странице. немогу понять почему не выводит ошибки, или как сделать чтоб выводил и ошибки и сообщение о том что залогинелся, вот код:

<?php
 
function login_menu()
{
    $items['login'] = array(
        'title' => t('Login form'),
        'page callback' => 'drupal_get_form',
        'page arguments' => array('user_login'),
        'access arguments' => array('access content'),
    );
 
    return $items;
}
 
function login_form_alter(&$form, &$form_type, $form_id)
{
    $enabled_links = array('login', 'register', 'password');
    switch ($form_id) {
        case 'user_login':
            $form['links'] = array(
                '#theme' => 'item_list',
                //'#items' => login_ajax_links($enabled_links, $form_id),
            );
            $form['actions']['submit']['#ajax'] = array(
                'callback' => 'login_ajax_callback',
            );
    }
}
 
/*function login_ajax_links($form, $form_state)
{
    if (!form_get_errors()) {
        $commands = _login_execute_form('login', $form_state);
        return array('#type' => 'ajax', '#commands' => $commands, '#ajax' => form_get_errors());
    }
 
    // Reload form if it didn't pass validation.
    return $form;
}*/
 
function login_ajax_callback($form, $form_state)
{
    if (!form_get_errors()) {
        $commands = _login_execute_form('login', $form_state);
        return array('#type' => 'ajax', '#commands' => $commands);
    }
    return $form;
}
 
function _login_execute_form($form_type, $form_state)
{
    // Include additinal ajax commands.
    ctools_include('ajax');
    ctools_include('modal');
    $redirect_behavior = variable_get('login_' . $form_type . '_redirect_behavior', 'default');
    $redirect_url = variable_get('login_' . $form_type . '_redirect_url', '');
    // Use the form state's redirect url for default behavior.
    if ($redirect_behavior == 'default' && !empty($form_state['redirect'])) {
        if (is_array($form_state['redirect'])) {
            $redirect_url = call_user_func_array('url', $form_state['redirect']);
            // Remove leading slash from the url.
            $redirect_url = drupal_substr($redirect_url, 1);
        }
        else {
            $redirect_url = $form_state['redirect'];
        }
    }
    elseif (($redirect_behavior == 'custom' && !empty($redirect_url)) || $redirect_behavior == 'none') {
        // Do nothing other than preventing the fallback.
    } // Refresh the page as a fallback redirect behavior.
    // This can happen if the form state does not have a redirect.
    else {
        $redirect_behavior = 'refresh';
    }
 
    // Provide additional logic and titles for different form types.
    switch ($form_type) {
 
        case 'login':
            $title = t('Successful login');
            $message = 'Login was successful. ';
            if ($redirect_behavior == 'refresh') {
                $message .= 'Page will now be reloaded.';
            }
            elseif ($redirect_behavior == 'default' || $redirect_behavior == 'custom') {
                $message .= 'Page will now be redirected.';
            }
 
            drupal_set_message(check_plain(t($message)));
            $commands[] = ctools_modal_command_display($title, theme('status_messages'));
            break;
    }
    // Send ajax command to modal based on redirect behavior.
 
    switch ($redirect_behavior) {
        case 'none':
            $commands[] = ctools_modal_command_display($title, theme('status_messages'));
            break;
 
        case 'refresh':
            $commands[] = ctools_ajax_command_reload();
            break;
 
        default:
            // Redirect to URL supplied from default or custom redirect behavior.
            $commands[] = ctools_ajax_command_redirect($redirect_url);
            break;
    }
    //print_r($commands);die();
    return $commands;
}
11.10.2012 13:59
Аватар пользователя Spleshka
Spleshka написал:

Добавьте при выводе комманд:

$commands[] = ajax_command_prepend('#selector', theme('status_messages'));

Эта команда добавляет в начало селектора #selector все сообщения, полученные до этого момента.

11.10.2012 23:25
Аватар пользователя Виктор
Виктор написал:

Здравствуйте, возник конфликт с каким то из модулей (страница не редиректится и не обновляется):
admin_menu
ajax_register
autoassignrole
better_exposed_filters
calendar
ckeditor
colorbox
context
ctools
date
debut_event
ds
email_registration
entity
eva
features
flag
galleryformatter
globalredirect
hansel
imce
libraries
login_destination
media
path_breadcrumbs
pathauto
privatemsg
profile2
rules
session_api
simple_dialog
taxonomy_display
taxonomy_menu
taxonomy_menu_trails
token
translation_helpers
transliteration
ubercart
uc_coupon
uc_webform_pane
userpoints
views
views_accordion
views_horizontal_slider
views_slideshow
webform
webform_term_opts
webform_validation
У кого еще возникали конфликты?

22.10.2012 12:38
Аватар пользователя Михаил
Михаил написал:

Окна регистрации и авторизации имеют разный дизайн. Каким образом можно темизировать. Оба окна имеют идентичные id и классы элементов. Подскажите пожалуйста

16.11.2012 15:56
Аватар пользователя Spleshka
Spleshka написал:

Надо лезть в код и добавлять класс. На данный момент по-другому никак. Напишите ишью на д.орг, как доберусь - сделаю.

16.11.2012 22:56
Аватар пользователя psymanik
psymanik написал:

А можно ли реализовать автоматический вызов окна входа для незарегистрированных пользователей???

19.12.2012 08:36
Аватар пользователя Игорь
Игорь написал:

Спасибо, отличный модуль, было бы хорошо большей юзабильности, чтобы при клике по серому фону вне попап-окна оно тоже закрывалось, чтобы не целиться в маленький крестик. Это стандартная практика для всяких лайтбоксов, колорбоксов и т.д. Людям привычно.

05.04.2013 10:38
Аватар пользователя vlad.dancer
vlad.dancer написал:

По поводу темизации попапа https://drupal.org/node/2028463

26.06.2013 14:19
Аватар пользователя Дру
Дру написал:

Как заменить путь /ajax_register/register/nojs на другой?

11.08.2013 22:35
Аватар пользователя Astral
Astral написал:

Отличный модуль.
1. У меня в Drupal 7 ссылка login переведена как "Имя", хотел бы заменить перевод на "Войти", никак не могу найти его англоязычный аналог (login и Log in уже перевёл, в самом попапе Войти, но на ссылке стоит Имя). Как её изменить?

2. Как изменить ширину попам при нажатии по ссылке Войти? (то что задал в настройках модуля, работает для Регистрация и Забыли пароль, а для Войти окно очень широкое, не то, что должно быть.

27.09.2013 03:25
Аватар пользователя Spleshka
Spleshka написал:

@Astral,
1. Поищите переводы на сайте для слова Login (с большой буквы).
2. Ширина должна была измениться, когда вы поменяли настройки. Если этого не произошло - пишите багрепорт в ишью к модулю, проверю.

27.09.2013 09:18
Аватар пользователя Серж
Серж написал:

Подскажите, а как сразу после регистрации попасть на страницу редактирования профиля user/uid/edit?

15.11.2013 17:01
Аватар пользователя Владим
Владим написал:

Всем здрасть. Подскажите, как прикрутить капчу к окнам? всё облазил но не нашёл.

25.01.2014 22:32
Аватар пользователя Сергей
Сергей написал:

Спасибо, за модулек. Давно на него посматривал, но он коряво работал. Пошел тестить :)
Потестил. Не пошло на моем проекте. Становится матовым, полупрозрачным экран и дальше дело не идет. Pop-up регистрация остается в мечтах.

31.01.2014 23:30
Аватар пользователя Виталий
Виталий написал:

Подскажите, а как можно сделать вкладки на ajax?

23.10.2014 21:01
Аватар пользователя Артем Андреев
Артем Андреев написал:

Здравствуйте! Отличный модуль. Вопрос: как заменить стандартные ссылки Друпала "Log in or register to post comments" на Ajax register?

27.10.2014 18:55
Аватар пользователя Denis-76
Denis-76 написал:

У меня данный модуль вызывает странный конфликт с webform в колорбоксе.
http://www.drupal.ru/node/114552
Возможно у Вас есть какие то идеи и соображения по этому поводу?
форму регистрации я вывожу через colorbox, а с вашим модулем просто обработка идет.
Буду признателен, если направите на путь истинный

13.12.2014 22:28
Аватар пользователя DrupRain
DrupRain написал:

Поставил на один из сайтов, с главной работает нормально, а с внутренних страниц перенаправляет в основную форму входа. В чем может быть проблема?

14.12.2014 00:06
Аватар пользователя Dd
Dd написал:

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

17.12.2014 13:45
Аватар пользователя Dd
Dd написал:

все, понял. класс вяжется по ID кнопки. сменил ID и все стало на свои места

17.12.2014 23:25
Аватар пользователя DVNik
DVNik написал:

del

24.11.2015 10:56
Аватар пользователя Mikhail
Mikhail написал:

Выше был вопрос на тему того, как переписать названия ссылок. У меня тот же вопрос! Как изменить кнопку "имя пользователя" на свое? А точнее - где? Перерыл все файлы модуля и не нашел.

09.11.2016 08:18
Аватар пользователя Игорь91
Игорь91 написал:

Добрый. Как менять местами и добавлять в форму регистрации свои элементы? Как вообще добраться до шаблона аякс регистрации ?

13.12.2016 11:42
Аватар пользователя Игорь91
Игорь91 написал:

Добрый. Как менять местами и добавлять в форму регистрации свои элементы? Как вообще добраться до шаблона аякс регистрации ?

13.12.2016 11:42

Комментировать