Подскажите насколько это рабочее решение

Приветствую. Возникла необходимость настроить оффлайн конверсии на сайте и загружать их в яндекс директ. Нейронка от гугла предлагает такое решение: добавить невидимое поле в комментарий к заказу. Вот что предлагает:

Сначала учим сайт запоминать Client ID при оформлении заказа, а затем генерируем правильный файл для Директа. Самый простой и надежный способ без изменения базы данных — передавать Client ID в поле comment при отправке формы заказа.

1. Откройте ваш чанк формы оформления заказа (обычно msOrder).
2. Добавьте внутрь формы <form ...> скрытый input:

<input type="hidden" name="comment" id="ym_client_id" value="">
3. Ниже на странице (после кода вызова счетчика Метрики) добавьте скрипт, который перехватит Client ID у Метрики и вставит его в этот input:

<script>
document.addEventListener("DOMContentLoaded", function() {
    // Замените 12345678 на ваш реальный номер счетчика Метрики
    ym(12345678, 'getClientID', function(clientID) {
        var input = document.getElementById('ym_client_id');
        if (input) {
            input.value = "ym_uid: " + clientID;
        }
    });
});
</script>
Теперь при оформлении покупки в комментарий к заказу в панели управления miniShop2 будет автоматически дописываться ID пользователя (например, ym_uid: 1546789023456711).

Как считаете, такое будет работать?

Потом предлагает создать новый сниппет с именем export_ms2_conversions и вставить в него код, который выбирает новые оплаченные (или выполненные) заказы, достает из комментария Client ID и формирует CSV-файл.

<?php
// Путь, куда сохранять файл на вашем FTP (сделайте папку доступной для чтения)
$filePath = MODX_BASE_PATH . 'assets/exports/conversions.csv';

// Подключаем miniShop2
$miniShop2 = $modx->getService('minishop2','miniShop2', $modx->getOption('minishop2.core_path',null,$modx->getOption('core_path').'components/minishop2/').'model/minishop2/');
if (!($miniShop2 instanceof miniShop2)) return 'Ошибка инициализации miniShop2';

// Выбираем заказы за последние 30 дней со статусом "Отправлен" или "Выполнен" (например, статус ID = 2 или 3)
// status IN (2,3) — подставьте ID ваших успешных статусов
$q = $modx->newQuery('msOrder');
$q->where(array(
   'status:IN' => array(2, 3), 
   'createdon:>' => date('Y-m-data H:i:s', strtotime('-30 days'))
));

$orders = $modx->getCollection('msOrder', $q);

$fp = fopen($filePath, 'w');
// Заголовки, которые требует Яндекс Директ
fputcsv($fp, array('Target_id', 'Client_id', 'DateTime', 'Price', 'Currency'), ',');

foreach ($orders as $order) {
    $comment = $order->get('comment');
    
    // Ищем наш ym_uid в комментарии
    if (preg_match('/ym_uid:\s*(\d+)/', $comment, $matches)) {
        $clientId = $matches[1];
        
        // ID цели «Покупка» в вашей Метрике (поменяйте на свой)
        $targetId = '987654321'; 
        
        $dateTime = strtotime($order->get('createdon')); // Время в Unix-формате
        $price = $order->get('cost');
        $currency = 'RUB';
        
        fputcsv($fp, array($targetId, $clientId, $dateTime, $price, $currency), ',');
    }
}

fclose($fp);
return 'Экспорт завершен. Файл создан: ' . $filePath;
Ну и дальше настройка автоматизации через планировщик Cron, создание файла cron_export.php. и код:

<?php
// Запускаем MODX в режиме API, чтобы не грузить весь визуальный шаблон сайта
define('MODX_API_MODE', true);
include_once('index.php'); 

// Включаем обработку ошибок на всякий случай
$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);

// Запускаем ваш ранее созданный сниппет
$modx->runSnippet('export_ms2_conversions');
По итогу этот файл должен будет скачивать яндекс директ и сверять ID клиентов с заказами, и смотреть с каких источников был заказ. Там это называется загрузка конверсий по FTP.

Стоит ли делать все вышеописанное или может какие то способы попроще есть?
Олег
Олег
1 час назад
modx.pro
9

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0