|
Надстройка "регистрация пользователей" и её простое использование были описана ранее. В продолжении этой статьи хочется осветить возможности, которые нужно предоставить пользователю по изменению личных данных.
Подключая стандартную таблицу vc_users к надстройке "Каталог", возможно добавление полей и расширение возможностей личного кабинета пользователя.
К примеру, подключаем дополнительные поля:
PHONE - телефон пользователя
ADDRESS - адрес пользователя
SENDMEMAILS - возможность принимать почту
Для этого создаём форму, аналогичную описанной в статье "регистрация пользователей", но с дополнительными формами. Эти формы могут быть отредактированы визуальным редактором, что важно для конечного пользователя (если он, конечно, захочет там покопаться).
Итак форма может выглядеть так:
<h1>Изменение данных пользователя {LOGIN}</h1>
<table border=0 cellspacing=5 cellpadding=0>
<form action="{action}" method="post" name="cabinet" onsubmit="return handle_form(this);">
<tr><td align="right">Пароль: </td><td><input class="cutebox" title="Пароль" type="password" name="password" /></td></tr>
<tr><td align="right">Пароль повторно: </td><td><input class="cutebox" title="Пароль повторно" type="password" name="password2" /></td></tr>
<tr><td>Получать предложения по e-mail:</td><td><input class="cutebox" needed="no" name="SENDMAILS" value="1" size="40" type="checkbox"></td>
<tr><td align="right">Имя: </td><td><input class="cutebox" needed="no" name="NAME" type="text" value="{NAME}" size=40/></td></tr>
<tr><td align="right">Фамилия: </td><td><input class="cutebox" needed="no" name="SNAME" type="text" size=40 value="{SNAME}" /></td></tr>
<tr><td align="right">Телефон: </td><td><input class="cutebox" needed="no" name="PHONE" type="text" size=40 value="{PHONE}" /></td></tr>
<tr><td align="right">Адрес:</td><td><textarea class="cutebox" cols=40 rows=5 needed="no" name="ADDRESS" type="text">{ADDRESS}</textarea></td></tr>
<tr><td align="right">Текст вашего объявления:</td><td><textarea class="cutebox" cols=40 rows=5 needed="no" name="INFO" type="text">{INFO}</textarea></td></tr>
<tr><td colspan=2><input class="cutebutton" type="submit" value="Изменить" /></td></tr>
</form> </table>
Функция hanfle_form может быть создана визуальным редактором или можно её вписать в таком виде (аттрибут needed добавляет визуальный редактор самостоятельно):
<script language="javascript1.2">
<!-- function handle_form(f) {
var elnum = f.elements.length;
var i = 0;
var str = '';
var newname = '';
var oldname = '';
for (i=0 ; i<elnum; i++) {
title = f.elements[i].title;
str = f.elements[i].value;
if (f.elements[i].getAttribute('needed')=='needed' && str=='')
{
var message = 'Поле обязательно для заполнения' +' "'+ title +'"';
alert(message);
f.elements[i].focus();
return false;
}
}
return true;
}
//-->
</script>
Далее можно использовать всё тот же скрипт регистрации. Единственное отличие теперь заключается в том, что пользовательские данные должны автоматически заполняться в описанную форму. Функция, которая позволяет управлять параметрами пользователя на базе шаблона называется dsRegShowAndEditParams. Описание можно найти в инструкции к DSite.
dsRegShowAndEditParams($ru, $templ_private_room, false, array('NAME', 'SNAME', 'INFO',
'PHONE', 'ADDRESS', 'SENDMAILS'));
Первый параметр: образец класса dsRegUserEx, далее ID страницы шаблона личного кабинета (см. выше). Третий параметр представляет больший интерес.
Если обновление параметров происходит одним и тем же скриптом, то необходимо показывать или изменять данные. Этот параметр позволяет управлять таким поведением. В данном случае мы показываем форму. Если же приходит POST запрос после вывода формы, то мы запускаем функцию с параметром true. В последнем массиве находится список переменных, которые должны быть как в форме, так и в таблице БД. Есть у этой функции ещё один необязательный параметр, в котором можно передать шаблону необходимые дополнительные переменные, что бывает очень удобно.
Для того чтобы работало обновление формы, строчкой ранее можно написать:
if (isset($_POST['password']) && isset($_POST['password2']))
{
$result = dsRegShowAndEditParams($ru, $templ_private_room, true, array('NAME', 'SNAME', 'INFO',
'PHONE', 'ADDRESS', 'SENDMAILS'));
}
Ну вот и почти всё. Волшебная функциа dsRegShowAndEditParams сама управляет выводом и заполнением данных в форме. При этом не нужно подвязывать класс ce.inc или писать многометровые PHP обвязки.
Единственным неудобством представляется checkbox. К сожалению HTML язык не предполагает заполнения checkbox-ов засчёт VALUE, поэтому в конце формы рекомендуется добавить строчку на javascript.
<script language="javascript1.2">
<!--
if ({SENDMAILS}) document.cabinet.SENDMAILS.checked = true;
-->
</script>
|