prodigynear Опубликовано 28 марта, 2014 Жалоба Поделиться Опубликовано 28 марта, 2014 Занимаясь рекламой своего магазина рано или поздно каждый придет к аналитике.В метрике она много попроще, чем в google analytics. В ГА можно показывать суммы транзакций от каждого канала/кампании, а если еще и загружать косты, к примеру, из директа, то можно увидеть четкую картину сколько приносит каждый вложенный в тот или иной канал рубль.В общем понадобилось связать симплу с ГА и Метрикой так, чтобы заказы не дублировались при обновлении страницы, кричал кричал фрилансерам, так никто и не помог (( Пришлось самому делать.Выкладываю код, сразу, если кто-то может его улучшить, то вэлком, однако, свои высери типа костыли не костыли оставьте при себе - я не программист. 1) Чтобы не раскидывать код по кускам шаблона, я создал в папке с темой файл metrics.tpl2) В файле index.tpl после <body> вписал {include file='metrics.tpl'}, тем самым подключив файл метрик к шаблону.3) В файле метрик я вписал код {literal} <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'КОД СЧЕТЧИКА', 'АДРЕС САЙТА'); ga('send', 'pageview'); </script> {/literal} {literal} Тем самым подключив к нему GA (предварительно создав аккаунт в гугл аналитикс) Далее подключил яндекс метрику {literal} <!-- Yandex.Metrika counter --> <script type="text/javascript"> (function (d, w, c) { (w[c] = w[c] || []).push(function() { try { w.yaCounterАЙДИСЧЕТЧИКА = new Ya.Metrika({id:АЙДИСЧЕТЧИКА, webvisor:true, clickmap:true, trackLinks:true, accurateTrackBounce:true}); } catch(e) { } }); var n = d.getElementsByTagName("script")[0], s = d.createElement("script"), f = function () { n.parentNode.insertBefore(s, n); }; s.type = "text/javascript"; s.async = true; s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js"; if (w.opera == "[object Opera]") { d.addEventListener("DOMContentLoaded", f, false); } else { f(); } })(document, window, "yandex_metrika_callbacks"); </script> <noscript> <div> <img src="//mc.yandex.ru/watch/АЙДИСЧЕТЧИКА" style="position: absolute; left: -9999px;" alt="" /> </div> </noscript> <!-- /Yandex.Metrika counter --> {/literal} Предварительно создав там аккаунт. Теперь настроил события. <script type="text/javascript"> {if isset($order)} {$t1 = $order->date|truncate:18:"":true} {$t2 = date("Y-m-d H:i:s")|truncate:18:"":true} {if $t1 == $t2} window.onload = function(){ yaCounterКОДСЧЕТЧИКА.reachGoal('orderComplete'); ga('send', 'event', 'button', 'orderComplete'); ga('require', 'ecommerce', 'ecommerce.js'); ga('ecommerce:addTransaction', { 'id': '{$order->id}', 'affiliation': 'САЙТНАПРИМЕР', 'revenue': '{$order->total_price}', 'shipping': '{$order->delivery_price}', }); {foreach $purchases as $pur} ga('ecommerce:addItem',{ 'id': '{$order->id}', 'name': '{$pur->product_name|escape}', 'sku': '{$pur->variant_id|escape}', 'category': 'present', 'price': '{($pur->price*$pur->amount)}', 'quantity': '{$pur->amount}' }); {/foreach} ga('ecommerce:send'); ga('ecommerce:clear'); } {/if} {/if} $( document ).ready(function() { $('.buttonCart').on('click', function() { ga('send', 'event', 'button', 'cartAdd'); yaCounterАЙДИСЧЕТЧИКА.reachGoal('addCart'); }); }); </script> В общем первая часть кода касается заказа, если создан заказ и время создания примерно равно текущему времени (заказ новый), то кидаем маячек нашим аналитикам, с соответствующими параметрами заказа.Вторая часть кода реагирует на нажатие кнопки в корзину (у всех таких кнопок должен быть доп.класс buttonCart)Не забудьте при этом добавить цели оформление заказа и добавление в корзину в яндекс.метрике и в ГА, кстати, в ГА еще в настройки ->представление нужно включить электронную торговлю. В общем то все, пользуйтесь на здоровье.Если есть вопросы можете задать на prodigynear@gmail.comУдачи в аналитике) Цитата Ссылка на сообщение Поделиться на другие сайты
Sid_Vishez Опубликовано 30 марта, 2014 Жалоба Поделиться Опубликовано 30 марта, 2014 Очень оригинальная идея со временем заказа! Но все-таки не 100% надежная, если пользователь сразу после оформления заказа перейдет по ссылке из письма, то в яндекс.метрике данные о источнике заказа будут искажены. Цитата Ссылка на сообщение Поделиться на другие сайты
prodigynear Опубликовано 1 апреля, 2014 Автор Жалоба Поделиться Опубликовано 1 апреля, 2014 Очень оригинальная идея со временем заказа! Но все-таки не 100% надежная, если пользователь сразу после оформления заказа перейдет по ссылке из письма, то в яндекс.метрике данные о источнике заказа будут искажены. Согласен, вероятность есть, но ничтожно мала, хотя в проектах с большим кол-вом заказов такое непременно случится, либо если он обновит страницу order в первую минуту после получения заказа, но 1 неправильная метрика из 1000 вряд ли испортит статистику. Да и, такое будет происходить очень редко. В принципе, можно давать не минуту, а, например, 5 секунд.Самый логичный способ в базе сделать флаг типа has_new, но я хотел сделать цели с минимумом изменений и в одном файле. Цитата Ссылка на сообщение Поделиться на другие сайты
Sid_Vishez Опубликовано 1 апреля, 2014 Жалоба Поделиться Опубликовано 1 апреля, 2014 можно совместить с вот этим предложением добавить ?new в url. Цитата Ссылка на сообщение Поделиться на другие сайты
deniszinin Опубликовано 20 июня, 2014 Жалоба Поделиться Опубликовано 20 июня, 2014 Подскажите пожалуйста, все ли я правильно понял. Я могу взять ваш код (вставить свой код счетчика), создать файл, подключить его к шаблону, и все будет работать? Или необходимо еще производить какие нибудь манипуляции для настройки ecommerce в метрике? Цитата Ссылка на сообщение Поделиться на другие сайты
Middy Опубликовано 21 июня, 2014 Жалоба Поделиться Опубликовано 21 июня, 2014 Автор, для чего в поле "price", где указывается цена за единицу товара, вы указываете цену за единицу умноженную на количество единиц товара? Цитата Ссылка на сообщение Поделиться на другие сайты
Middy Опубликовано 21 июня, 2014 Жалоба Поделиться Опубликовано 21 июня, 2014 Вопрос без подвохов. У меня вот цена вообще не передаётся. хотя в скрипт вставляется нормлаьно. В аналитике остаётся имя, количество, ИД транзакции, вобщем всё всё, но цена стоит 0. Как за штуку, так и общая. Цитата Ссылка на сообщение Поделиться на другие сайты
ATOM57 Опубликовано 5 июля, 2014 Жалоба Поделиться Опубликовано 5 июля, 2014 А есть код событий отдельно для аналитикса? А то у меня уже метрика настроена, не хочется дублировать или дербанить этот код. Цитата Ссылка на сообщение Поделиться на другие сайты
doctorwhoyouare Опубликовано 16 сентября, 2014 Жалоба Поделиться Опубликовано 16 сентября, 2014 Мечтаю, чтобы кто-нибудь настроил мне цели, с учетом того что у меня simpla с аякс-корзиной..не смог разобраться по этой инструкции Цитата Ссылка на сообщение Поделиться на другие сайты
Dmitry86 Опубликовано 1 февраля, 2017 Жалоба Поделиться Опубликовано 1 февраля, 2017 (изменено) можно совместить с вот этим предложением добавить ?new в url. https://site.ru/order/ce977a127s2a3b8da1fcv971d7618723?new Не уверен, что будет работать, т.к. вообще не соображаю в регулярках, но можно попробовать первичное посещение страницы с оформленным заказом отслеживать вот такой регуляркой в Яндекс.Метрике (то есть настроить цель): \/order\/[0-9a-z]*\?new По идее такая регулярка должна фиксировать все урлы, в которых содержится /order/ потом любой набор букв и цифр и затем ?new ну и соответственно после нажатия на кнопку "Оформить заказ" нужно посылать пользователя на страницу вида: https://site.ru/order/ce977a127s2a3b8da1fcv971d7618723?new Если я где ошибся в регулярке - исправьте, пожалуйста, знающие люди! И еще вопрос: как сделать, чтобы после нажатия на кнопку "Оформить заказ" - корзина редиректилась на сраницу с заказом с "?new" ... только в базу записывался адрес без "?new" Изменено 1 февраля, 2017 пользователем Dmitry86 Цитата Ссылка на сообщение Поделиться на другие сайты
Dmitry86 Опубликовано 1 февраля, 2017 Жалоба Поделиться Опубликовано 1 февраля, 2017 (изменено) Короче, вроде бы решил. В целях в метрике добавил регулярку: https\:\/\/site\.ru\/order\/[0-9a-z]+\?new В CartView.php заменил // Перенаправляем на страницу заказа header('Location: '.$this->config->root_url.'/order/'.$order->url); на // Перенаправляем на страницу заказа header('Location: '.$this->config->root_url.'/order/'.$order->url.'?new'); Теперь в метрике отслеживается только первое посещение страницы с заказом, которая получается сразу после оформления в корзине. Ругайте, если что-то не так сделал. P.S. Проверял цели как тут сказано: https://yandex.ru/support/metrika/reports/add-goals.xml#check-goalработает корректно, регулярка схватывает страницу. Изменено 1 февраля, 2017 пользователем Dmitry86 Цитата Ссылка на сообщение Поделиться на другие сайты
despro7 Опубликовано 10 мая, 2018 Жалоба Поделиться Опубликовано 10 мая, 2018 Я пробовал настраивать срабатывание кода отслеживания конверсий с помощью метода, описанного выше, а именно: {if $order && strpos($smarty.server.HTTP_REFERER,"/cart")} {$date_now = time()|truncate:8:"":true} {$date_order = $order->date|date_format:"%s"|truncate:8:"":true} {if $date_now == $date_order} <!-- Данные о заказанных товарах для GA --> <script> window.dataLayer = window.dataLayer || []; dataLayer.push({ldelim} ... </script> <!-- End Данные о заказанных товарах для GA --> {/if} Суть данного метода заключается в том, чтобы js-код срабатывал только при первом посещении страницы "Спасибо за заказ" (site.ru/order/) за счёт определения времени оформления заказа и его сравнение и текущим временем. В процессе отладки казалось бы всё работает правильно и чётко, но почему-то данные о заказах в Яндекс Метрику и Гугл Аналитику поступают через раз. Сейчас, когда я отключил эту проверку, все заказы фиксируются в электронной коммерции, но также появляются и дубли. Вопрос для знающих людей: можно ли передавать некий сигнал (например из CartView.php в шаблон order.tpl) при оформлении заказа и первом посещении этой страницы. Чтобы уже непосредственно в шаблоне order.tpl делать проверку по типу: {if $order && $visit_page == 'first'} Цитата Ссылка на сообщение Поделиться на другие сайты
igorro Опубликовано 8 июня, 2018 Жалоба Поделиться Опубликовано 8 июня, 2018 Реализовал проверку на первое посещение страницы "Спасибо за заказ". Подробности в этой теме Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.