Bitrix - a pop-up window with a promotional code and sending by mail
Rus
Eng
Битрикс - всплывающее окно с промокодом и отправкой по почте

All English-language materials have been translated fully automatically using the Google service

Let's define what:

  1. ip will be in a separate HL block. Its structure:

Field: String
Code: UF_USER_IP

Field: Yes / No
Code: UF_USER_SUBSCRIBE_Y
Default: no

Field: Date with time
Code: UF_POPUPSOW
Default: current time

2. The settings will be in a separate IB c type = preferences and id = IB_SETTINGS
IB will have one custom property: Value
Type: String
Code: VAL

3. Create a new section in IB: "Settings for a pop-up with a promo" and remember its id.
4. Add settings:
Subscription info text: Welcome
Show popup every n days: 3
Popup active: Y
Coupon validity: 3  

Code in init.php

  / * Determine if you need a popup with a promo code in the PageStart event * /
require ($_SERVER ['DOCUMENT_ROOT']. '/ local / libs / init / promoCoupon.php');  

Listing promoCoupon.php

<?php
//Если мы в админке
if (defined('ADMIN_SECTION') && (ADMIN_SECTION === true))
    return false;

\Bitrix\Main\EventManager::getInstance()->addEventHandlerCompatible(
    'main',
    'OnPageStart',
    'Promo::Start'
);

use Bitrix\Main\Loader,
    Bitrix\Highloadblock as HL,
    Bitrix\Main\Entity;

use Bitrix\Main\Type\DateTime;

Loader::includeModule("highloadblock");
Loader::IncludeModule('iblock');

class Promo{
    function Start()
    {
        //Объявляем глобальную переменню
        global $promoPopup;

        //По умолчанию показывать попап не нужно
        $promoPopup['ACTIVE'] = 'N';

        //Если мы уже осуществляли проверки, то выходим
        //if(isset($_SESSION['POPUP_CHECKED'])){return false;}

        //Получаем настройки попапа с промокодом
        $arSelect = array('ID', 'NAME', 'CODE', 'PREVIEW_TEXT', 'PROPERTY_VAL');
        $arFilter = array(
            '=IBLOCK_ID' => 14,
            '=IBLOCK_TYPE' => 'preferences',
            '=IBLOCK_SECTION_ID' => 70,
            '=ACTIVE' => 'Y',
            '=ID' => array(2509, 2510, 2511, 2512),
        );

        $res = CIBlockElement::GetList(Array(), $arFilter, false, Array(), $arSelect);

        //Ищем настройки попапа
        while($ob = $res->GetNextElement())
        {
            $arFields = $ob->GetFields();

            $promoPopup[$arFields['ID']]=$arFields;
        }

        //Получаем ip стандартными методами Битрикс
        $ip = \Bitrix\Main\Service\GeoIp\Manager::getRealIp();

        //Заполняем массив начальными данными
        $data['ID'] = 4;//(UserIPTables,useriptables)
        $data['IP'] = $ip;

        //Записываем IP пользователя
        $promoPopup['IP'] = $ip;

        //Проводим дальнейшие вычисления только если в опции стоит галка, что показывать попап нужно
        if ($promoPopup[2509]['PROPERTY_VAL_VALUE'] == 'Y') {

            //Ищем запись о показе по айпи
            $userByIP = isNeedPromoShow ($data);

            if($userByIP['UF_USER_SUBSCRIBE_Y']==1){return false;}

            if($userByIP['COUNT']<1){
                //Если запись о пользователе по ip не найдена
                //Ставим галку, что показывать попап нужно
                $promoPopup['ACTIVE'] = 'Y';
            }else{
                //Если запись о пользователе по ip найдена
                //То проверяем дату и если она подходит показываем
                $date = date("Y-m-d H:i:s");//Текущее время по Москве
                $showing = $userByIP['UF_POPUPSOW']->format("Y-m-d H:i:s");

                //считаем разницу между датами
                $diff = dateDiff($showing, $date);

                //Если разница между показанным попапом больше установленной даты для повторного показа
                if ($diff['hours'] > ($promoPopup[2510]['PROPERTY_VAL_VALUE'] * 24)) {
                    //То показываем попап
                    $promoPopup['ACTIVE'] = 'Y';
                }
            }

        }
        $_SESSION['POPUP_CHECKED'] = 'Y';
    }
}

//Проверяем нужно ли показывать пользователю попап с промокодом
function isNeedPromoShow($data)
{
    $hlblock = HL\HighloadBlockTable::getById($data['ID'])->fetch(); //где ID - id highloadblock блока из которого будем получать данные

    $entity = HL\HighloadBlockTable::compileEntity($hlblock);
    $entity_data_class = $entity->getDataClass();

    $result = array();

    $data = $entity_data_class::getList(array(
        "select" => array("*"),
        "order" => array("ID" => "DESC"),
        "filter" => array(
            "UF_USER_IP" => $data['IP'],//Фильтрация выборки по IP
            //"!=UF_USER_SUBSCRIBE_Y" => 1 //Если промокод отправлен, то не получаем ничего
        )
    ));

    $result['COUNT'] = 0;

    while ($arData = $data->Fetch()) {
        $result['UF_POPUPSOW'] = $arData['UF_POPUPSOW'];
        $result['UF_USER_SUBSCRIBE_Y'] = $arData['UF_USER_SUBSCRIBE_Y'];

        if ($arData['UF_USER_SUBSCRIBE_Y'] == 0) {
            $result['COUNT']++;
        }
    }

    //Возвращаем все найденные элементы
    return $result;
}

//Ставим запись о том что попап просмотрен
function setPromoViewed($data)
{
    $hlblock = HL\HighloadBlockTable::getById($data['ID'])->fetch();

    $entity = HL\HighloadBlockTable::compileEntity($hlblock);
    $entity_data_class = $entity->getDataClass();

    $date = new \Bitrix\Main\Type\DateTime(date("d.m.Y H:i:s"));

    //Массив добавляемых параметров
    $arFields = array(
        'UF_USER_IP' => $data['IP'],
        //'UF_USER_SUBSCRIBE_Y' => 1,
        'UF_POPUPSOW' => $date,
    );

    $el = checkIsIPSaved($data);

    if ($el > 0) {
        //Если ip записан, то обновляем запись
        $r = $entity_data_class::update($el, $arFields);
    } else {
        //Если ip не записан, то добавляем запись
        $result = $entity_data_class::add($arFields);

        if ($result->isSuccess()) {
            $r = 'Y';
        } else {
            $r = 'Ошибка: ' . implode(', ', $result->getErrors()) . "";
        }
    }

    return $r;
}

//Ставим запись о том что попап просмотрен
function setPromoSend($data)
{
    $hlblock = HL\HighloadBlockTable::getById($data['ID'])->fetch();

    $entity = HL\HighloadBlockTable::compileEntity($hlblock);
    $entity_data_class = $entity->getDataClass();

    $date = new \Bitrix\Main\Type\DateTime(date("d.m.Y H:i:s"));

    //Массив добавляемых параметров
    $arFields = array(
        'UF_USER_IP' => $data['IP'],
        'UF_USER_SUBSCRIBE_Y' => 1
    );

    $el = checkIsIPSaved($data);

    if ($el > 0) {
        //Если ip записан, то обновляем запись
        $r = $entity_data_class::update($el, $arFields);
    } else {
        //Если ip не записан, то добавляем запись
        $result = $entity_data_class::add($arFields);

        if ($result->isSuccess()) {
            $r = 'Y';
        } else {
            $r = 'Ошибка: ' . implode(', ', $result->getErrors()) . "";
        }
    }


    return $r;
}

//Проверяем есть ли ip в базе
function checkIsIPSaved($data)
{
    $hlblock = HL\HighloadBlockTable::getById($data['ID'])->fetch(); //где ID - id highloadblock блока из которого будем получать данные

    $entity = HL\HighloadBlockTable::compileEntity($hlblock);
    $entity_data_class = $entity->getDataClass();

    $data = $entity_data_class::getList(array(
        "select" => array("*"),
        "order" => array("ID" => "DESC"),
        "filter" => array("UF_USER_IP" => $data['IP']) //Фильтрация выборки
    ));

    $r = 0;

    while ($arData = $data->Fetch()) {
        $r = $arData['ID'];
    }

    return $r;
}

//Вычисляем разницу между датами
function dateDiff($date1, $date2)
{
    $time = new \DateTime($date1);

    $since_time = $time->diff(new \DateTime($date2));

    $A['days'] = $since_time->days;
    $A['hours'] = $since_time->days * 24 + $since_time->h;
    $A['minutes'] = ($since_time->days * 24 * 60) + ($since_time->h * 60) + $since_time->i;

    return $A;
}

Listing /include/libs/sendCoupon.php

<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');

//Подключаем модули
use Bitrix\Main\Application;
use Bitrix\Main\Type\DateTime;
use Bitrix\Main\Web\Cookie;

$result = array('success' => 'N');

if (check_bitrix_sessid() && $_SERVER["REQUEST_METHOD"] == "POST" && !$_POST['MAIL']) {

    CModule::IncludeModule("sale");
    CModule::IncludeModule("catalog");
    CModule::IncludeModule("subscribe");

    $RUB_ID = array();
    $RUB_LIST = '';

    // получим все активные рубрики
    $rsRubric = CRubric::GetList(array(), array("ACTIVE" => "Y"));
    while ($arRubric = $rsRubric->GetNext()) {
        $RUB_ID[] = $arRubric['ID'];
        $RUB_LIST .= $arRubric['NAME'] . '/n';
    }

    /* создадим массив на подписку */
    $subscr = new CSubscription;
    $arFields = array(
        "USER_ID" => $USER,
        "FORMAT" => "html/text",
        "EMAIL" => htmlspecialchars($_POST['EMAIL']),
        "ACTIVE" => "Y",
        "RUB_ID" => $RUB_ID,
        "SEND_CONFIRM" => "N",
        "CONFIRMED" => "Y"
    );

    $id = $subscr->Add($arFields, SITE_ID);

    if ($id > 0) {

        global $promoPopup;

        //Генерируем новый купон
        $coupon = CatalogGenerateCoupon();

        //Добавляем новый купон на сайт
        $result = \Bitrix\Sale\Internals\DiscountCouponTable::add(array(
            "COUPON" => $coupon,
            "DISCOUNT_ID" => 123,//ID правила работы с корзиной
            "ACTIVE" => "Y",
            "TYPE" => \Bitrix\Sale\Internals\DiscountCouponTable::TYPE_ONE_ORDER,
            'ACTIVE_FROM' => new \Bitrix\Main\Type\DateTime(date("d.m.Y H:i:s")),
            'ACTIVE_TO' => new \Bitrix\Main\Type\DateTime(date("d.m.Y H:i:s", strtotime('+' . $promoPopup[2511]['PROPERTY_VAL_VALUE'] . ' days'))),
            //"USER_ID"=>$idUser,
            'MAX_USE' => 1
        ));

        //Меняем путь к подтверждению подписки
        $arFields = array(
            'EMAIL' => htmlspecialchars($_POST['EMAIL']),
            'DATE' => date("d.m.Y H:i:s"),
        );

        if ($result->isSuccess()) {
            $arFields['COUPON'] = $coupon;
        } else {
            //echo $result->getErrorMessages();
            $arFields['COUPON'] = 'Во время генерации купона возникла ошибка. Пожалуйста, обратитесь к администрации';
        }

        //Отправляем письмо с купоном, генерируя событие
        CEvent::Send("SENDER_SUBSCRIBE_CONFIRM_COUPON", 's1', $arFields, "N"); //Тип события: Отправка сообщения через новую форму обратной связи

        $data = array(
            'ID' => 4,
            'IP' => $promoPopup['IP']
        );

        //Устанавливает галочку об успехе отправки купона
        setPromoSend($data);

        $application = Application::getInstance();
        $context = $application->getContext();

        $cookie = new Cookie("SUBSCRIBED", 'Y', time() + 3600 * 12 * 360);
        $cookie->setDomain($_SERVER['SERVER_NAME']);
        $cookie->setHttpOnly(false);

        $context->getResponse()->addCookie($cookie);
        $context->getResponse()->flush("");

        $result = array('success' => 'Y');
    } else {
        $result = array('success' => 'Exist');
    }
}

echo json_encode($result);

Listing css

.absoluteCenter { display: -webkit-box; display: -moz-box; display: -ms-flexbox; display: -webkit-flex; display: flex; -webkit-box-align: center; -moz-box-align: center; -ms-flex-align: center; -webkit-align-items: center; align-items: center; -webkit-box-pack: center; -moz-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; text-align: center; flex-direction: column}

.js-dClose,svg,.d--Inner a,.d--but {-moz-transition: all 0.5s;-webkit-transition: all 0.5s;-o-transition: all 0.5s;-ms-transition: all 0.5s}

.d--Outer{display: flex;background-color: rgba(0,0,0,0.5);position: fixed;top:0;left:0;width:100%;height:100%;z-index: 1000;}
.d--Inner {background-color: #fff;padding:40px 40px;position: relative;min-width: 320px;max-width: 500px;max-height:90vh;-webkit-box-shadow: 0px 5px 10px 0px rgba(0,0,0,0.2); -moz-box-shadow: 0px 5px 10px 0px rgba(0,0,0,0.2); box-shadow: 0px 5px 10px 0px rgba(0,0,0,0.2);text-align: center;}
.d--Inner h2{font-family: 'OpenSans-Bold',Verdana,sans-serif;font-size: 24px; font-weight: 600;line-height: 32px;margin-bottom:14px;text-align: left}

.d--Inner > div{display: none}
.d--Inner > div.active{display: block}

.js-dClose{position: absolute;right: 15px;top:15px;border-radius: 50%;width: 15px;height:15px;cursor:pointer}
.js-dClose .svgBox{margin-top:3px;}
.js-dClose svg{width: 100%;height:100%;fill:#000;stroke:#000;}
.js-dClose:hover svg{fill:#3d3d3d;stroke:#3d3d3d;}

.d--title{font-family: 'OpenSans', 'OpenSans-Regular';font-size: 16px;font-weight: 600;color:#000;width: 70%;margin: 0 auto}

.d--form{padding-top: 30px}

.d--input{width: 60%;height: 44px;border-radius: 0px;border-style: none;border-width: 1px;border-bottom: 1px solid #ccc;font-family: 'OpenSans', 'OpenSans-Regular';box-sizing: border-box;padding-left: 12px;background-color: white;background-image: none;margin: 0;display: inline-block;outline: 0;color:#000}

.js-coupon-send-form .input-row:nth-child(3){display: none}

.d--submit {margin-top: 40px;text-transform: uppercase}
.d--but {outline: 0;display: inline-block;padding: 0 27px;text-shadow: none;text-decoration: none;background-color: #000000;color: #ffffff;min-width: 110px;height: 44px;line-height: 44px;border-radius: 0;border-style: none;font-family: 'OpenSans-Bold';font-size: 13px;letter-spacing: 2px;}
.d--but:hover {background-color: #ffffff;color: #000000;}

.d--policy {width: 80%;margin: 0 auto;line-height: 18px;margin-top: 30px;font-family: 'OpenSans-Regular',Verdana,sans-serif;}
.d--policy a{text-decoration: none;border-bottom:1px solid transparent}
.d--policy a:hover{text-decoration: none;border-bottom:1px solid #a2a2a2}

.d--bar {position: relative;display: block;width: 60%;margin: 0 auto;}
.d--bar:before, .d--bar:after {content: "";height: 2px;width: 0;bottom: 0;position: absolute;background: #000;transition: 0.2s ease all;-moz-transition: 0.2s ease all;-webkit-transition: 0.2s ease all;}
.d--bar:before {left: 50%;}
.d--bar:after {right: 50%;}

/* active state */
input:focus ~ .d--bar:before,
input:focus ~ .d--bar:after {
    width: 50%;
}

.d--row.error .d--bar:before,.d--row.error .d--bar:after{background-color: #ff0000}
.d--row.error .d--input{border-bottom: 1px solid #ff0000}

@media all and (max-width: 545px) {
    .d--Inner {min-width: 320px;max-width: 320px;padding: 40px 20px 40px 20px;}
}

Listing js

/* Проверка на json */
function IsJsonString(str) {
	try {
		JSON.parse(str);
	} catch (e) {
		return false;
	}
	return true;
}

function closeGallery(){
	$('.d--Outer').fadeOut(0,function(){
		$('.d--Inner .active').removeClass('active');
	});
}

function formLoad(formid){
	$('.d--Inner').stop();
	$('.d--Inner > div:visible').fadeOut(400,function(){
		$('.d--Inner > div').removeClass('active');
		$('.d--Inner .'+formid).addClass('active');
		$('.d--Outer').stop().css("display", "flex").hide().fadeIn(0);
	});
}

function fSubmit(form){//универсальная функция валидации форм
	var THIS_FORM = form;

	var req_input = $(THIS_FORM).find(".required");
	var flag = 0;

	var reg_email = /^[a-zA-Z0-9\._-]+@[a-zA-Z0-9_\.-]{2,45}\.[a-zA-Z]{2,20}$/ ;
	reg_phone = /^(\s*)?(\+)?([- _():=+]?\d[- _():=+]?){10,14}(\s*)?$/,
		cc = /[0-9]{4} {0,1}[0-9]{4} {0,1}[0-9]{4} {0,1}[0-9]{4}/, //Credit card number
		cdate = /^\d{2}[./-]\d{2}$/, //Credit card Date
		smsCode = /^\d{3} \d{3}$/, //SMS Code Verification
		cvc = /^[0-9]{3,4}$/;

	$.each(req_input, function(index) {
		var el = $(this),
			THIS_VALUE = el.val(),
			row = el.parents('.input-row');

		if(el.is(".field_email") || el.is(".field_login")){
			if (reg_email.test(THIS_VALUE)){
				row.removeClass('error');
			}else {
				row.addClass('error');
				flag++;
			}
		}else if(el.is(".field_pass") || el.is(".field_pass_confirm")){
			if($(".field_pass_confirm").length>0){
				if (THIS_VALUE.length>5 && ($(".field_pass").val()==$(".field_pass_confirm").val())){
					row.removeClass('error');
				}else {
					row.addClass('error');
					flag++;
				}
			}else{
				if (THIS_VALUE.length>5){
					row.removeClass('error');
					tool.html('');
				}else {
					row.addClass('error');
					flag++;
				}
			}


		}else if(el.is("#mail") || el.is(".field_mail")){

		}else{
			if (THIS_VALUE){
				row.removeClass('error');
			}else {
				console.log('error');
				row.addClass('error');
				flag++;

			}
		}

	});

	if (flag){ return false;}
	else { return true;}
}

(function($) {
	/*********************************/
	/* Общие функции для работы с формой */
	/*********************************/
	$('body').on('change','.d--Outer input[type="text"]',function(){//Вызываем изменения состояние полей ввода при их редактировании
		fSubmit($(this).parents('form'));
	});

	$('body').on('click','.d--Outer',function(e){
		if ($('.d--Outer').has(e.target).length === 0){//Отслеживаем клик именно по элементу
			closeGallery();
		}
	});

	$(document).keydown(function(e) {
		if( e.keyCode === 27 ) {

			var popup=$('.d--Outer:visible');
			if (popup){
				closeGallery(popup);
				return false;
			}

		}
	});

	/*********************************/
	/* Login\Register */
	/*********************************/

	$('body').on('click','.js-dClose',function (e) {
		e.preventDefault();
		closeGallery($('.d--Outer:visible'));
	});

	//Отслеживаем клик
	$('.js-retrieve-promo').on('click',function (e) {
		e.preventDefault();

		if(fSubmit($(this).parents('form'))){
			$.ajax({
				type: "POST",
				url: '/include/libs/sendCoupon.php',
				data: $(this).parents('form').serialize(),
				timeout: 30000,
				error: function(request,error) {
					console.log(request);
					console.log(error);
					if (error == "timeout") {
						console.log('timeout');
					}
					else {
						console.log('Error! Please try again!');
					}
					formLoad('subscribeError');
				},
				success: function(data) {
					console.log(data);
					if(IsJsonString(data)){
						data = JSON.parse(data);
						switch (data.success) {
							case 'Y':
								formLoad('subscribeSuccessFree');
								break;
							case 'N':
								formLoad('subscribeError');
								break;
							case 'Exist':
								formLoad('subscribeExist');
								break;
							default:
								formLoad('subscribeSuccessFree');
						}
					}
				}
			});
		}

	});

})(jQuery);

HTML code of forms

<div class="d--Outer absCenter">
	<div class="d--Inner">
		<div class="subscribePromo active">
			<div class="popup" id="remind-popup">
				<div title="Закрыть" class="js-dClose" href="javascript:void(0);">
					<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512.001 512.001" style="enable-background:new 0 0 512.001 512.001;" xml:space="preserve"><path d="M284.286,256.002L506.143,34.144c7.811-7.811,7.811-20.475,0-28.285c-7.811-7.81-20.475-7.811-28.285,0L256,227.717 L34.143,5.859c-7.811-7.811-20.475-7.811-28.285,0c-7.81,7.811-7.811,20.475,0,28.285l221.857,221.857L5.858,477.859 c-7.811,7.811-7.811,20.475,0,28.285c3.905,3.905,9.024,5.857,14.143,5.857c5.119,0,10.237-1.952,14.143-5.857L256,284.287 l221.857,221.857c3.905,3.905,9.024,5.857,14.143,5.857s10.237-1.952,14.143-5.857c7.811-7.811,7.811-20.475,0-28.285 L284.286,256.002z"/></svg>
				</div>
				<div class="hello-popup" id="hello-popup" style="display: block;">
					<div class="logo"></div>
					<div class="d--title"><?= $promoPopup[2512]['PROPERTY_VAL_VALUE'] ?></div>
					<form enctype="application/x-www-form-urlencoded" class="js-coupon-send-form d--form" method="post" novalidate="novalidate">
						<?= bitrix_sessid_post(); ?>
						<div class="d--row input-row">
							<input type="text" name="EMAIL" value="" class="required field_email d--input" placeholder="Ваш Email" autocomplete="off" />
							<span class="d--bar"></span>
						</div>
						<div class="d--row input-row">
							<input type="text" name="MAIL" value="" class="required field_mail" placeholder="Ваша почта" autocomplete="off" />
							<span class="d--bar"></span>
						</div>
						<input type="submit" class="d--submit d--but js-retrieve-promo" value="Подписаться" />
					</form>
					<div class="d--policy"><?= $promoPopup[2512]['PREVIEW_TEXT'] ?></div>
				</div>
			</div>
		</div>
		<div class="subscribeSuccessFree">
			<div class="popup" id="subscribeSuccess">
				<div title="Закрыть" class="js-dClose" href="javascript:void(0);">
					<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512.001 512.001" style="enable-background:new 0 0 512.001 512.001;" xml:space="preserve"><path d="M284.286,256.002L506.143,34.144c7.811-7.811,7.811-20.475,0-28.285c-7.811-7.81-20.475-7.811-28.285,0L256,227.717 L34.143,5.859c-7.811-7.811-20.475-7.811-28.285,0c-7.81,7.811-7.811,20.475,0,28.285l221.857,221.857L5.858,477.859 c-7.811,7.811-7.811,20.475,0,28.285c3.905,3.905,9.024,5.857,14.143,5.857c5.119,0,10.237-1.952,14.143-5.857L256,284.287 l221.857,221.857c3.905,3.905,9.024,5.857,14.143,5.857s10.237-1.952,14.143-5.857c7.811-7.811,7.811-20.475,0-28.285 L284.286,256.002z"/></svg>
				</div>
				<a title="Закрыть" class="fancybox-item fancybox-close formClose" href="javascript:void(0);"></a>
				<h2>Подписка Сайт</h2>
				<div class="subtitle" style="text-align: left">Рады, что Вы теперь с нами :)</div>
			</div>
		</div>
		<div class="subscribeError">
			<div class="popup" id="subscribeError">
				<div title="Закрыть" class="js-dClose" href="javascript:void(0);">
					<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512.001 512.001" style="enable-background:new 0 0 512.001 512.001;" xml:space="preserve"><path d="M284.286,256.002L506.143,34.144c7.811-7.811,7.811-20.475,0-28.285c-7.811-7.81-20.475-7.811-28.285,0L256,227.717 L34.143,5.859c-7.811-7.811-20.475-7.811-28.285,0c-7.81,7.811-7.811,20.475,0,28.285l221.857,221.857L5.858,477.859 c-7.811,7.811-7.811,20.475,0,28.285c3.905,3.905,9.024,5.857,14.143,5.857c5.119,0,10.237-1.952,14.143-5.857L256,284.287 l221.857,221.857c3.905,3.905,9.024,5.857,14.143,5.857s10.237-1.952,14.143-5.857c7.811-7.811,7.811-20.475,0-28.285 L284.286,256.002z"/></svg>
				</div>
				<a title="Закрыть" class="fancybox-item fancybox-close formClose" href="javascript:void(0);"></a>
				<h2>Подписка Сайт</h2>
				<div class="subtitle" style="text-align: left">Во время оформления подписки произошла ошибка.</div>
			</div>
		</div>
		<div class="subscribeExist">
			<div class="popup" id="subscribeExist">
				<div title="Закрыть" class="js-dClose" href="javascript:void(0);">
					<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512.001 512.001" style="enable-background:new 0 0 512.001 512.001;" xml:space="preserve"><path d="M284.286,256.002L506.143,34.144c7.811-7.811,7.811-20.475,0-28.285c-7.811-7.81-20.475-7.811-28.285,0L256,227.717 L34.143,5.859c-7.811-7.811-20.475-7.811-28.285,0c-7.81,7.811-7.811,20.475,0,28.285l221.857,221.857L5.858,477.859 c-7.811,7.811-7.811,20.475,0,28.285c3.905,3.905,9.024,5.857,14.143,5.857c5.119,0,10.237-1.952,14.143-5.857L256,284.287 l221.857,221.857c3.905,3.905,9.024,5.857,14.143,5.857s10.237-1.952,14.143-5.857c7.811-7.811,7.811-20.475,0-28.285 L284.286,256.002z"/></svg>
				</div>
				<a title="Закрыть" class="fancybox-item fancybox-close formClose" href="javascript:void(0);"></a>
				<h2>Подписка Сайт</h2>
				<div class="subtitle" style="text-align: left">Вы уже подписаны.</div>
			</div>
		</div>
	</div>
</div>

Comments

There are no comments yet, you can be the first to leave it

Leave a comment

The site uses a comment pre-moderation system, so your message will be published only after approval by the moderator

You are replying to a user's comment

Send

FEEDBACK

Email me

Are you developing a new service, making improvements to the existing one and want to be better than your competitors? You have come to the right place. I offer you a comprehensive studio-level website development. From me you can order design, layout, programming, development of non-traditional functionality, implementation of communication between CMS, CRM and Data Analitics, as well as everything else related to sites, except for promotion.

Contact, I will always advise on all questions and help you find the most effective solution for your business. I am engaged in the creation of sites in Novosibirsk and in other regions of Russia, I also work with the CIS countries. You will be satisfied with our cooperation

An error occurred while sending, please try again after a while
Message sent successfully

Phones

+7(993) 007-18-96

Email

info@tichiy.ru

Address

Россия, г. Москва

By submitting the form, you automatically confirm that you have read and accept the Privacy Policy site

Contact with me
Send message
By submitting the form, you automatically confirm that you have read and accept Privacy policy of site
Sending successful!
Thank you for contacting :) I will contact you as soon as possible
Sending failed
An error occurred while sending the request. Please wait and try again after a while or call my phone number