В этой статье мы разберём какие изменения необходимо внести в сайт на системе 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]]
Теперь при каждой отправке формы к ней будут подключаться данные аналитики, которые прикрепились к пользователи при заходе на сайт.