В битриксе нет скидок, привязываемых к пользователю. Можно включить пользователя в определенную группу, у которой есть право на скидку, но автоматизировать этот процесс не получится. Хорошо бы было иметь инфоблок со скидками и выгружать на сайт содержимое инфоблока в виде XML.
Я в конце концов реализовал следующим образом:
Так как скидки фиксированные, 3-х типов, то:
1. Создал 3 группы пользователей (пустых, пользователей туда не включаем).
2. Создал 3 скидки, в свойствах которых прописал право на скидку для соответствующей группы
3. Создал инфоблок скидок с свойствами привязки к пользователю и символьным кодом скидки
4. в init.php прописал обработчик события OnAfterUserLogin и OnAfterUserLoginByHash
AddEventHandler("main", "OnAfterUserLogin", "MyOnAfterUserLogin");
AddEventHandler("main", "OnAfterUserLoginByHash", "MyOnAfterUserLogin");
// создаем обработчик события "OnAfterUserLogin"
function MyOnAfterUserLogin(&$fields)
{
global $USER;
// если логин OK
if ($USER->IsAuthorized())
{
$UserID = $USER->GetID();
if($UserID > 0)
{
$GetUser = CUser::GetByID($UserID);
$arUser = $GetUser->Fetch();
$MemberOfList = CUser::GetUserGroup($UserID); // смотрим в каких группах состоит
$MemberMask = array(2,3); // Коды групп "Все, в том числе и неавторизованные" и "зарегистрированные пользователи"
$ArDiff = array_diff($MemberOfList,$MemberMask); // Проверяем, что это обычный юзер и больше ни в каких группах не состоит
if (empty($ArDiff))
{
CModule::IncludeModule("iblock");
$SelectGroups = CIBlockElement::GetList(
array(),
array(
"IBLOCK_CODE" => "USER_DISCOUNT",
"PROPERTY_DISCOUNT_USER" => $UserID
),
false,
false,
array("PROPERTY_DISCOUNT_USER","PROPERTY_DISCOUNT_GROUP") // поля ИД юзера и символьный код группы скидки
);
if ($SelectGroup = $SelectGroups->Fetch())
{
$arGroups = CGroup::GetList(
($by="c_sort"),
($order="desc"),
array(
"STRING_ID" => $SelectGroup["PROPERTY_DISCOUNT_GROUP_VALUE"] // находим группу по символьному ИД
)
);
if ($arGroup = $arGroups->Fetch())
{
$CurGroups = $USER->GetUserGroupArray();
$CurGroups[] = $arGroup["ID"];
$USER->SetUserGroupArray($CurGroups); // добавляем юзера в группу скидки на время его сессии
}
}
}
}
}
}
|
В итоге в момент логина юзер временно добавляется в группу, соответствующую скидке. А в инфоблоке можно менять уровень скидки либо руками, либо выгружая автоматически.







