Дисконтные карты в «1С-Битрикс»

Александр Стерхов

Веб-разработчик

Дисконтные карты в «1С-Битрикс»

Одним из самых распространенных элементов маркетинговой стратегии магазинов являются дисконтные карты. Действительно, покупатели предпочитают приобретать необходимые товары у тех предприятий, которые предоставляют им возможность получать дополнительные выгоды от этого. Поэтому 1С предоставляет широкий функционал для управления различными видами дисконтных карт. Однако, он не реализован в CMS Битрикс.

Задача

В модуле Интернет—магазин CMS 1С-Битрикс для получения скидки можно добавить купон. Их можно использовать как дисконтные карты пользователей. Но купоны с помощью стандартного функционала нельзя синхронизировать с 1С.

Решение

  1. создадим инфоблок Дисконтные карты;
  2. добавим свойство Вид карты типа список со значениями «Золотая карта» (10% скидки), «Серебряная карта» (5% скидки), «Зелёная карта» (3% скидки).
  3. добавим 3 группы пользователей: «С золотой картой», «С серебряной картой», «С зелёной картой».
  4. создадим пользовательское свойство «Дисконтные карты», объектом которого будет USER, а значения — привязка к элементам инфоблока Дисконтные карты;
  5. добавим три скидки на товар «Зелёная» (3%), «Серебряная» (5%) и «Золотая» (10%).

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

Проверим, есть ли в инфоблоке дисконтная карта с соответствующим номером:

$rsDiscount = CIBlockElement::GetList(
	array(),
	array("IBLOCK_ID"=>#ID#, "ACTIVE"=>"Y", "NAME"=>$_REQUEST["cardNumber"]),
	false,
	array("nTopCount"=>1),
	array("ID", "IBLOCK_ID", "PROPERTY_CART_TYPE")
);

Если такая карта нашлась, то добавляем пользователя к одной из трех групп:

if ($arDiscount = $rsDiscount->GetNext()) {
	$result = array_diff(
		$USER->GetUserGroupArray(),
		array(#ID_GREEN_GROUP#, #ID_SILVER_GROUP#, #ID_GOLD_GROUP#)
	);

	$newGroup = array_merge($result, array(#USER_GROUP_ID#));
	$USER->SetUserGroupArray($newGroup);

И присваиваем созданному ранее пользовательскому свойству идентификатор дисконтной карты в инфоблоке:

	$arFields = Array("UF_DISCOUNT_CART"=>$arDiscount["ID"]); 
	$USER->Update($USER->GetId(), $arFields);
}

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

Таким образом были создан функционал для работы с дисконтными картами пользователей, который, по сравнению с купонами имеет ряд преимуществ:

  1. купоны нельзя синхронизировать с 1С стандартным функционалом;
  2. нельзя применить два купона для текущей корзины;
  3. величина скидки сразу видна в каталоге, а при применении купона — только в корзине.

Комментарии

Тут без вас никак. Поделитесь с нами вашими мыслями

  • Спасибо большое за идею, за реализацию) хотел спросить, нет ли здесь ошибки? $arFields = Array( «UF_DISCOUNT_CART» => $arDiscount["ID"], ); $USER->Update($USER->GetId(), $fields); в методе Update вторым посылаемым значением, вы отправляете $fields а не массив $arFields
  • Спасибо, Александр, поправили.
  • Здравствуйте! Не можете ли Вы расписать в каких файлах должен находиться приведенный Вами код?
  • Здравствуйте, Юрий! Можете прописать обработчик в init.php (/bitrix/php_interface/init.php) на изменение пользовательских данных.
  • Добрый день. А как выгрузить из 1С дисконтные карты в этот инфоблок?
  • Здравствуйте, Николай! Это нестандартный функционал, решение самописное, делалось 1С-ком.
  • Здравствуйте! у меня сайт стоит на движке "Joomla" как сделать Дисконтную систему для моего сайта
  • Добрый день. Помогите пожалуйста правильно реализовать Ваш код... Где и как мне добавить поле для ввода номера дисконтной карты пользователем? в файле: init.php мы можем сделать проверку "если такая карта есть" — "то привязать пользователя к группе с определенным процентом". Но я не могу понять где пользователь должен вводить номер своей карты... Сам не программист, поэтому задаю очень глупые вопросы, но очень прошу Вас помочь разобраться и правильно установить все на сайте! Спасибо!
  • Иван, поле для ввода номера карты, логично вывести, в личном кабинете пользователя.
  • Денис, спасибо за ответ! Так и сделал, хотя ответ только сейчас увидел...
Горячие вакансии