В данной статье рассмотрены варианты применения скидок после успешного прохождения опроса с помощью модуля 1С-Битрикс Опросы, а также опроса сервиса marquiz.ру:
Для реализации скидки с помощью правил потребуется наш модуль - Произвольное PHP условие правил работы с корзиной. Свои (кастомные) условия в скидках.
I. Для модуля 1С-Битрикс. Опросы.
AddEventHandler("vote", "onAfterVoting", Array("CDev", "onAfterVotingHandler"));
class CDev { public static function onAfterVotingHandler($voteId, $eventId, $userId) { if ($voteId > 0) { $application = Bitrix\Main\Application::getInstance(); $context = $application->getContext(); $cookie = new Cookie("SCODER_VOTE_SUCCESS", "Y", time() + 60*60*24); $cookie->setDomain($context->getServer()->getHttpHost()); $cookie->setHttpOnly(false); Bitrix\Main\Application::getInstance()->getContext()->getResponse()->addCookie($cookie); $context->getResponse()->flush(""); } } }
(Bitrix\Main\Application::getInstance()->getContext()->getRequest()->getCookie("SCODER_VOTE_SUCCESS") == "Y")
II. Для квиза marquiz.ру (через Webhooks).
Bitrix\Main\Page\Asset::getInstance()->addString( '< script type="text/javascript"> document.addEventListener("marquizLoaded", function() { Marquiz.addParam("FUSER_ID", "'. \Bitrix\Sale\Fuser::getId(). '"); }); < /script>', true, \Bitrix\Main\Page\AssetLocation::AFTER_JS_KERNEL );
Предлагаем обрабатывать эти данные с помощью обработчика событий OnBeforeProlog. Код функции будет выглядеть следующим образом:
$data = json_decode(file_get_contents('php://input'), true); if (is_array($data) && !empty($data['extra']['FUSER_ID']) && $data['extra']['FUSER_ID'] > 0 ) { $fuser_id = $data['extra']['FUSER_ID']; $load = array( "FUSER_ID" => $fuser_id, "DATE_INSERT" => new \Bitrix\Main\Type\DateTime(), "QUIZE_NAME" => $data['quiz']['name'], "QUIZE_ID" => $data['quiz']['id'], ); $filter = array( "FUSER_ID" => $fuser_id, ); $dbResultList = Scoder\Tools\FusersTable::getList(array( 'filter' => $filter, 'select' => array("ID","FUSER_ID"), )); if ($fields = $dbResultList->Fetch()) { $result = Scoder\Tools\FusersTable::update($fields["ID"], $load); // if ($result->isSuccess()){} } else { $result = Scoder\Tools\FusersTable::add($load); //if ($result->isSuccess()){} } }
Scoder\Tools\FusersTable - это класс работы с таблицей в базе данных, описанном в произвольном кастомном модуле. Таблица создается следующим образом:
create table if not exists scoder_tools_marquiz_fusers ( ID int NOT NULL auto_increment, FUSER_ID int not null, DATE_INSERT datetime not null, QUIZE_NAME varchar(255) not null, QUIZE_ID varchar(255) not null, PRIMARY KEY(ID) );
По реализации в виде модуля можете обратиться к нам. Или же, в качестве альтернативы, можете использовать инфоблоки или highload-блоки ЦМС 1С-Битрикс.
Class CScoderTools { public static function __sc_vote_success() { $btrue = false; $filter = array( "FUSER_ID" => \Bitrix\Sale\Fuser::getId(), ); $dbResultList = Scoder\Tools\FusersTable::getList(array( 'filter' => $filter, 'select' => array("ID","FUSER_ID"), )); if ($fields = $dbResultList->Fetch()) { $btrue = true; } return $btrue; } }
Разумеется, логику можно развивать. Например, предоставлять разные скидки или подарки в зависимости от квиза или вариантов ответов на вопросы...