Чтобы сделать авторизацию в клиентском разделе дорабатываем форму на сайте:
<div class="red_grad">
<div class="tl"></div>
<div class="tr"></div>
<div class="bl"></div>
<div class="br"></div>
<div id="SiteUser">
<h2>Личный кабинет</h2>
<div id="SiteUserMessage"></div>
<p>
<form class="form_to_main" action="/users/" method="POST" enctype="multipart/form-data">
Пользователь:
<input name="site_user_login" type="text">
Пароль:
<input name="site_user_password" type="password">
<input class="button" type="submit" name="apply" value="Войти" onclick="return AjaxSendForm(fCallBackSiteUser, '&action=ajax', this)">
</form>
</p>
</div>
<script type="text/javascript">
/**
* Функция обратного вызова при авторизации пользователя
*/
function fCallBackSiteUser(responseJS)
{
if (typeof responseJS != 'undefined')
{
if (typeof responseJS.message != 'undefined')
{
var oDivMessage = document.getElementById('SiteUserMessage');
if (oDivMessage)
{
oDivMessage.innerHTML = responseJS.message;
}
}
if (typeof responseJS.content != 'undefined')
{
var oDiv = document.getElementById('SiteUser');
if (oDiv)
{
oDiv.innerHTML = responseJS.content;
// Выполняем скрипты из полученного с сервера HTML-а
runScripts(oDiv.getElementsByTagName('SCRIPT'));
}
}
}
}
</script>
</div>
В настройках типовой динамической страницы кабинета пользователя фрагмент
if (isset($_POST['apply']))
{
...
}
заменяем на
// Нажали кнопку войти
if (isset($_POST['apply']))
{
/* Проверяем доступность пользователя */
$user_id = $SiteUsers->ValidUser(to_str($_POST['site_user_login']), to_str($_POST['site_user_password']));
if ($user_id > 0)
{
if (isset($_POST['remember_me']))
{
$expires = 2678400; // 31 день
}
else
{
$expires = 86400; // 1 день
}
// Авторизируем пользователя
$SiteUsers->SetCurrentSiteUser($user_id, $expires);
}
// Если была AJAX-авторизация -- отправим ответ
if (isset($_REQUEST['action']))
{
$JsHttpRequest = new JsHttpRequest(SITE_CODING);
if ($user_id > 0)
{
ob_start();
/* Формируем список меню кабинета */
$external_propertys[$i = 0]['xml_name']='link';
$external_propertys[$i]['value']=array(
0 => array('xml_name' => 'link_address',
'value' =>'registration/'),
1 => array('xml_name' => 'link_name',
'value' =>'Личная информация'),
2 => array('xml_name' => 'link_url_image',
'value' =>'/images/user_info.gif'));
if (class_exists("Maillist"))
{
$external_propertys[++$i]['xml_name']='link';
$external_propertys[$i]['value']=array(
0 => array('xml_name' => 'link_address',
'value' =>'maillist/'),
1 => array('xml_name' => 'link_name',
'value' =>'Рассылки'),
2 => array('xml_name' => 'link_url_image',
'value' =>'/images/maillist.gif'));
}
if (class_exists('shop'))
{
$external_propertys[++$i]['xml_name']='link';
$external_propertys[$i]['value']=array(
0 => array('xml_name' => 'link_address',
'value' =>'order/'),
1 => array('xml_name' => 'link_name',
'value' =>'Мои заказы'),
2 => array('xml_name' => 'link_url_image',
'value' =>'/images/my_orders.gif'));
$affiliate = new affiliate();
// Получим идентификаторы групп пользователей, в которой состоит текущий пользователь
$site_users_groups_row = $SiteUsers->GetGroupsForUser($user_id);
// Проверим, есть ли для текущей группы пользователей сайта доступные партнерские программы
$affiliate_res = $affiliate->GetAllAffiliatePlans($site_users_groups_row);
if ($affiliate_res && mysql_num_rows($affiliate_res) > 0)
{
$external_propertys[++$i]['xml_name']='link';
$external_propertys[$i]['value']=array(
0 => array('xml_name' => 'link_address',
'value' =>'affiliats/'),
1 => array('xml_name' => 'link_name',
'value' =>'Партнерские программы'),
2 => array('xml_name' => 'link_url_image',
'value' =>'/images/partner_program.gif'));
}
}
if (class_exists('SiteUsers'))
{
$external_propertys[++$i]['xml_name']='link';
$external_propertys[$i]['value']=array(
0 => array('xml_name' => 'link_address',
'value' =>'account/'),
1 => array('xml_name' => 'link_name',
'value' =>'Лицевой счет'),
2 => array('xml_name' => 'link_url_image',
'value' =>'/images/user_bill.gif'));
}
if (class_exists('helpdesk'))
{
$external_propertys[++$i]['xml_name']='link';
$external_propertys[$i]['value']=array(
0 => array('xml_name' => 'link_address',
'value' =>'helpdesk/'),
1 => array('xml_name' => 'link_name',
'value' =>'Служба техподдержки'),
2 => array('xml_name' => 'link_url_image',
'value' =>'/images/help.gif'));
}
if (class_exists('shop'))
{
$external_propertys[++$i]['xml_name']='link';
$external_propertys[$i]['value']=array(
0 => array('xml_name' => 'link_address',
'value' =>'my_advertisement/'),
1 => array('xml_name' => 'link_name',
'value' =>'Мои объявления'),
2 => array('xml_name' => 'link_url_image',
'value' =>'/images/bulletin_board.gif'));
}
$external_propertys[++$i]['xml_name']='link';
$external_propertys[$i]['value']=array(
0 => array('xml_name' => 'link_address',
'value' =>'?action=exit'),
1 => array('xml_name' => 'link_name',
'value' =>'Выход'),
2 => array('xml_name' => 'link_url_image',
'value' =>'/images/user_exit.gif'));
// Получаем данные о пользователе
$user_row = $SiteUsers->GetListPrimaryProperties($user_id);
if ($user_row)
{
// Отображает кабинет пользователя
$SiteUsers->ShowUserOffice("ЛичныйКабинетПользователяAjax", $external_propertys);
}
else
{
$GLOBALS['_RESULT']['message'] = "Пользователь не найден!";
}
$GLOBALS['_RESULT']['content'] = ob_get_clean();
}
else
{
$GLOBALS['_RESULT']['message'] = "Неправильный логин или пароль!";
}
echo $JsHttpRequest->LOADER;
exit ();
}
}
Создадим XSL-шаблон "ЛичныйКабинетПользователяAjax":
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<xsl:template match="/document">
<p><b>Пользователь <xsl:value-of select="site_users_login"/></b></p>
<!-- Выводим меню -->
<ul style="padding-left: 20px">
<xsl:apply-templates select="link"/>
</ul>
</xsl:template>
<xsl:template match="link">
<li>
<a href="/users/{link_address}"><xsl:value-of select="link_name"/></a>
</li>
</xsl:template>
</xsl:stylesheet>
Аналогичным образом можно поступать и с другими формами.