Подскажите насколько это рабочее решение
Есть решение
Приветствую. Возникла необходимость настроить оффлайн конверсии на сайте и загружать их в яндекс директ. Нейронка от гугла предлагает такое решение: добавить невидимое поле в комментарий к заказу. Вот что предлагает:
Сначала учим сайт запоминать Client ID при оформлении заказа, а затем генерируем правильный файл для Директа. Самый простой и надежный способ без изменения базы данных — передавать Client ID в поле comment при отправке формы заказа.
1. Откройте ваш чанк формы оформления заказа (обычно msOrder).
2. Добавьте внутрь формы <form ...> скрытый input:
Как считаете, такое будет работать?
Потом предлагает создать новый сниппет с именем export_ms2_conversions и вставить в него код, который выбирает новые оплаченные (или выполненные) заказы, достает из комментария Client ID и формирует CSV-файл.
Стоит ли делать все вышеописанное или может какие то способы попроще есть?
Сначала учим сайт запоминать 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. Стоит ли делать все вышеописанное или может какие то способы попроще есть?
Комментарии: 3
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Ещё не стоит занимать полем ClientID штатный comment: покупатель может оставить там свой комментарий, а два поля с одинаковым именем дадут неоднозначный результат. Лучше отдельное поле заказа.
И время создания заказа не равно времени оплаты. Если выгружаете именно оплаченные конверсии, сохраняйте событие оплаты отдельно.