Закрыть
E-mail:
Пароль:
Забыли пароль?
В каталоге проекта: 12 678 веб-студий, 947 CMS, 228 533 сайта.
РегистрацияCMS MagazineВход
CMS Magazine CMS Magazine

S.Builder 4.0: Программирование формы логина с применением технологии AJAX.

Упоминаемые CMS

В процессе разработки сайтов на этой замечательной системе я постоянно сталкиваюсь с очень нетривиальными задачами. Часто парнеры и знакомые разработчики меня спрашивают - как реализовать ту или иную функцию. Я решил изложить их в виде цикла статей. Начнем с того, чем я занимаюсь на данный момент - настройкой формы логина на сайте под системой S.Builder с применением AJAX. Я не стал писать собственную библиотеку для работы с AJAX - использую широко известную и уже зарекомендовавшую себя PROTOTYPE. Скачать ее можно с сайта prototypejs.org. Итак, приступим.

Для реализации такой формы нам подребуется отдельная страничка, на которой будет размещена форма логина. Страничка должны быть пустой (т.е. без лишнего html - кода), для того, чтобы мы могли динамически обновить форму и отследить ошибки. Идем в меню пользователя - управление страницами и создаем Раздел AJAX с путем ajax/. Там и в дальнейшем мы будем создавать нужные нам странички. Для удобства я создаю еще подраздел Пользователи сайта (ajax/users/) - на моем сайте много где будет использоватся данная технология и мне не хотелось бы запутаться в файлах. В итоге получаем:


В шаблоны дизайна добавляем новый макет с единственным тегом - {AJAX}. Устанавиливаем этот шаблон для категории по умолчанию:


И создаем страничку "форма логина" - ajax/users/login.php. К ней при помощи наших скриптов мы будем создавать запросы, а результаты выводить в основную форму логина. Основная форма логина на моем сайте выглядит вот так:


 

<a href="#" onClick="if($('auth').style.display == 'block') {$('auth').style.display ='none';} else {$('auth').style.display = 'block'; }" style="font-size:12px;font-weight:bold;" style="font-size:14px;">Вход на сайт</a>
<div class="border" style="display:<?if(isset($_POST['su_login'])) { echo 'block'; } else { echo 'none';}?>;position:absolute;padding:5px;background:#ffffff;" id='auth'> <form action="{SU_ACTION}" method="post">
<input type="text" class="auth_text" name="su_login" value="Имя пользователя" onFocus="this.value='';"><br />
<input type="password" class="auth_text" value="Пароль" name="su_pass" onFocus="this.value='';"><br />
<input type="submit" value="Войти"> <a href="/user/reg.php">Регистрация</a></form></div>

Соответственно необходимо чтобы при нажатии на "Войти" система отправляла данные на страничку /ajax/users/login.php, проверяла ответ. В зависимости от ответа она должна либо возвращать ошибку, либо заменять форму логина #auth на приветствие со входом на сайт. В коде формы вы могли заметить обращение ${'auth'}. Так выглядит упрощенная форма записи часто используемой функции document.getElementById. В функцию можно передать несколько аргументов - тогда она вернет объект с массивом перечисленных элементов. Переделаем код формы логина для использования ее с применением AJAX:

<a href="#" onClick="if($('auth').style.display == 'block') {$('auth').style.display ='none';} else {$('auth').style.display = 'block'; }" style="font-size:12px;font-weight:bold;" style="font-size:14px;">Вход на сайт</a>
<div class="border" style="display:<?if(isset($_POST['su_login'])) { echo 'block'; } else { echo 'none';}?>;position:absolute;padding:5px;background:#ffffff;" id='auth'> <form action="{SU_ACTION}" method="post" onSubmit="return checkUser();" id="auth_form">
<input type="text" class="auth_text" name="su_login" id="su_login" value="Имя пользователя" onFocus="this.value='';"><br />
<input type="password" class="auth_text" value="Пароль" id="su_pass" name="su_pass" onFocus="this.value='';"><br />
<input type="submit" value="Войти"> <a href="/user/reg.php">Регистрация</a></form>

Как вы видите на отправку формы теперь будет вызываться функция checkUser(). Она возвращает false для того, чтобы страница не перезагружалась. В остальные поля мы добавили id - для обращения к ним. Теперь нам необходимос создать шаблон формы логина, который со страницы ajax/users/login.php будет возвращать нам данные - код, которым мы заменим форму логина вслучае успешной авторизации на сайте. И подключить библиотеку prototype добавлением строки "

" в head макета дизайна страницы. Итак функция checkUser():

function checkUser()
{
var action = 'http://whatwedding.ru/ajax/users/login.php';
var pars = 'su_login='+$('su_login').value+'&su_pass='+$('su_pass').value;
var myAjax = new Ajax.Updater('auth_form', action, {method: 'post', parameters: pars});
return false;
}

Разберем функцию по порядку. Свойство action - наша страничка, на которой выводится только форма логина и системное сообщение. Pars - параметры, передаваемые на эту страничку (логин и пароль пользователя). Все эти параметры передаются в метод класса Ajax библиотеки prototype. auth_form - id элемента который мы будем обновлять, далее подставляем action, параметры и метод передачи данных. Дело осталось за малым - подключить форму логина для ajax странички в sbuilder`е и прописать в шаблон код который будет там выводится. В моем случае это:

<small style="color:red;">{MESSAGE}</small><br />
<input type="text" class="auth_text" name="su_login" id="su_login" value="Имя пользователя" onFocus="this.value='';"><br />
<input type="password" class="auth_text" value="Пароль" id="su_pass" name="su_pass" onFocus="this.value='';"><br />
<input type="submit" value="Войти"> <a href="/user/reg.php">Регистрация</a>

Итак, мы получили форму логина которая работает на AJAX. Теперь заходя на сайт пользователей ненадо будет перенаправлять на другую страницу:


Если у кого то есть вопросы по статье - пишите m@iqcompany.ru. Буду рад услышать отзывы и предложения по темам статей. Максим Гасумянц (Компания IQ - Разработка сайтов)

Автор: Максим Гасумянц

Комментарии (3)


CMS Magazine CMS Magazine
RSS-подписка
CMS Magazine CMS Magazine
CMS Magazine