Отправляем данные с сайта на CMS ModX


В этой статье мы разберём какие изменения необходимо внести в сайт на системе ModX, чтобы отправить данные в MoreKIT.

Настройка отправки формы

Для начала настройки нужно войти в админку сайта.

Создание сниппета

Переходим на вкладку «Элементы», разворачиваем панель «Сниппеты» и нажимаем «Добавить».

В форме добавления сниппета заполняем поля (название — sendMoreKit):

В код сниппета необходимо вставить следующий код (не забудьте заменить ссылку https://ep.morekit.io/XXXXXXX на вашу):

<?php
if (isset($_SERVER))
{
    if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER))
    {
        $realip = current(preg_grep(
            "/^(10|172\\.16|192\\.168)\\./",
            array_map('trim', explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])),
            PREG_GREP_INVERT
        ));
    }
    $realip = $realip?:@$_SERVER['HTTP_CLIENT_IP']?:@$_SERVER['REMOTE_ADDR']?:NULL;
}


$ip = $realip?:$realip = '0.0.0.0';


//Интеграция с amoCRM MoreKIT
$moreUrl = 'https://ep.morekit.io/XXXXXXX';
$postArr = $hook->getValues();
$postArr["USER_IP"] = $ip;


$micookie = json_decode($_COOKIE['_mk_si'], true);
$pars = array('utm_source', 'utm_medium', 'utm_term', 'utm_content', 'utm_campaign', 'roistat_visit','_ga','_ym_uid');

foreach ($pars as $par) {
  if (isset($micookie[$par])) {
      $postArr[$par] = $micookie[$par];
  }
}

$opts = array('http' =>
  array(
      'method' => 'POST',
      'header' => 'Content-type: application/x-www-form-urlencoded',
      'content' => http_build_query($postArr),
      'timeout' => 1,
  )
);


$myCurl = curl_init();
curl_setopt($myCurl, CURLOPT_URL, $moreUrl);
curl_setopt($myCurl, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($myCurl, CURLOPT_POST, TRUE);
curl_setopt($myCurl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($myCurl, CURLOPT_POSTFIELDS, json_encode($postArr));
curl_setopt($myCurl, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($myCurl, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
$response = curl_exec($myCurl);
curl_close($myCurl);

Подключение отправки к форме

Находим где в системе описана форма заявки (обычно она находится в разделах «Шаблоны» или «Чанки»):

[[!AjaxForm?
                    &snippet=`FormIt`
                    &form=`tpl.callback-1`
                    &hooks=`email`
                    &emailSubject=`Оставить заявку`
                    &emailTo=`[[++emailsender]]`
                    &validate=`Имя:required,Email:required,check:required`
                    &validationErrorMessage=`В форме содержатся ошибки!`
                    &successMessage=`Сообщение успешно отправлено`
                ]]

и добавляем в поле hooks через запятую вызов функции из ранее созданного сниппета:

Теперь при отправке формы она также будет отправлена на процесс в MoreKIT!

Настройка сборки аналитики для отправки скриптом

Чтобы также собирать информацию по аналитическим метрикам (UTM-метки, значения счётчиков Google, Яндекс и Roistat) необходимо добавить ещё один сниппет.

Создаём сниппет

Создаём по аналогии с процессом отправки (название — collectAnalyticsMoreKit):

Код для вставки:

<?php
if (isset($_COOKIE['_mk_si']))
    $micookie = json_decode($_COOKIE['_mk_si'], true);
else
    $micookie = array();

$utms = array('utm_source', 'utm_medium', 'utm_term', 'utm_content', 'utm_campaign');
$cookies = array('roistat_visit','_ga','_ym_uid');

foreach($utms as $utm)
	if (!empty($_GET[$utm])) $micookie[$utm]=$_GET[$utm];

foreach($cookies AS $cookie) 
	if(!empty($_COOKIE[$cookie])) $micookie[$cookie]=$_COOKIE[$cookie];

setcookie('_mk_si',json_encode($micookie),time()+3600*24*365, "/");

Активируем сбор на сайте

Чтобы данные собирались необходимо что сниппет срабатывал на каждой странице.

Для этого можно вставить его в чанк подвала (обычно находится в Чанки > core > footer) или в каждый Шаблон.

В конце шаблона/чанка добавляем строку:

[[!collectAnalyticsMoreKit]]

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