Подключаем Ecommerce в Яндекс.Метрике
        Всем привет. На форуме куча полезной информации по разработке магазинов. Я же в свою очередь хочу рассказать про настройку аналитики. 
Итак мы будем передавать информацию из магазина miniShop в Яндекс.Метрику для того, чтобы в полном объёме пользоваться отчётами Электронной коммерции .
Сразу скажу, что информация ниже рассчитана на новичков. Я не владею программированием и не нашел пошагового решения в интернете, поэтому потратил немало времени. Надеюсь этот пост пригодится другим юзерам.
Итак мы будем передавать в метрику 3 события:
Передав данные об этом событии, мы сможем строить отчёты по просмотрам товаров, а также применять к ним любые группировки, доступные в Метрики. Легче понять, что больше интересует тех, кто пришел из соц. сетей, а что тех, кто из поиска, например.
Для начала нам нужно на каждую страницу товара (в шаблон карточки товара) добавить код:
Добавление товара в корзину
Здесь всё тоже самое, только используем немного другую конструкцию из документации Яндекса и вешаем её на колбэк успешного добавления товара в корзину:
 
Покупка
Это, пожалуй, наиболее сложная для новичка часть. Скрипт работает на странице оформления заказа. Проходит по всем товарам в заказе, собирает значения и после успешного оформления заказа отправляет их в dataLayer.
Здесь многое зависит от того как свёрстана ваша корзина. У меня все классы и id стандартные, я их не менял, так что будьте внимательны. Итак, следующий код надо разместить на странице Корзины:

P.S.
    
    
                                                                                
            Итак мы будем передавать информацию из магазина miniShop в Яндекс.Метрику для того, чтобы в полном объёме пользоваться отчётами Электронной коммерции .
Сразу скажу, что информация ниже рассчитана на новичков. Я не владею программированием и не нашел пошагового решения в интернете, поэтому потратил немало времени. Надеюсь этот пост пригодится другим юзерам.
Итак мы будем передавать в метрику 3 события:
- Просмотр полного описания товара
 - Добавление товара в корзину
 - Покупка
 
Передав данные об этом событии, мы сможем строить отчёты по просмотрам товаров, а также применять к ним любые группировки, доступные в Метрики. Легче понять, что больше интересует тех, кто пришел из соц. сетей, а что тех, кто из поиска, например.
Для начала нам нужно на каждую страницу товара (в шаблон карточки товара) добавить код:
var productData = {
    "price" : "[[+price]]",
    "name" : "[[*pagetitle]]"
}
window.dataLayer = window.dataLayer || [];
// просмотр товара
dataLayer.push({
    "ecommerce": {
        "detail": {
            "products": [
                {
                    "name" : productData.name,
                    "price": productData.price.replace(/\s+/g, '')
                }
            ]
        }
    }
});Суть в том, что мы создаем объект productData, в него передаём значения названия товара и цены и потом эти значения передаём в специальный контейнер window.dataLayer. Тут всё согласно документации Яндекса."price": productData.price.replace(/\s+/g, '')Этот метод удаляет пробелы из цены 1 500 приводит к виду 1500.Добавление товара в корзину
Здесь всё тоже самое, только используем немного другую конструкцию из документации Яндекса и вешаем её на колбэк успешного добавления товара в корзину:
// добавление товара в Корзину
miniShop2.Callbacks.Cart.add.response.success = function() {
dataLayer.push({
    "ecommerce": {
        "add": {
            "products": [
                {
                    "name": productData.name,
                    "price": productData.price.replace(/\s+/g, '')
                }
            ]
        }
    }
});
} Покупка
Это, пожалуй, наиболее сложная для новичка часть. Скрипт работает на странице оформления заказа. Проходит по всем товарам в заказе, собирает значения и после успешного оформления заказа отправляет их в dataLayer.
Здесь многое зависит от того как свёрстана ваша корзина. У меня все классы и id стандартные, я их не менял, так что будьте внимательны. Итак, следующий код надо разместить на странице Корзины:
window.dataLayer = window.dataLayer || [];
miniShop2.Callbacks.Order.submit.response.success = function () {
var productData = [];
$('.Cart__item').each(function() {
   var item = $(this);
   productData.push({
    name: item.find('.title a').text(), // находим все названия товаров в корзине
    price: item.find('.price').text().replace(/\s+/g, '').replace('руб.', ''), // приводим 1 500 руб. к виду 1500
    quantity: item.find('input[name="count"]').val() // передаем количество каждого товара
   });
  })
var orderId = Math.floor(Math.random() * (1000000 - 1) + 1); // генерируем случайное значение
dataLayer.push({
    "ecommerce": {
        "purchase": {
            "actionField": {
                "id" : orderId,
                "goal_id" : "XXXXXX",  // здесь надо указать id цели Заказ.
            },
"products": productData
}
}
});
yaCounterXXXXXXX.reachGoal('SUCORD'); // код вашего счётчика и идентификатор цели - успешный заказ.
}После всех этих действий в метрике появится вся информация о заказах, корзинах и товарах. Вот такая красота 
P.S.
var orderId = Math.floor(Math.random() * (1000000 - 1) + 1); // генерируем случайное значениеВот здесь не очень хорошо, потому что мы генерируем случайный номер заказа, а было бы круто, если бы он совпадал с тем, который генерирует miniShop. Но с этим я уже разбираться не стал(    Комментарии: 18
                Очень полезно, спасибо!            
                    
                Форум многое мне дал. Пришло время отплатить, ну по мере возможностей и знаний :)            
                    
                Большое спасибо!            
                    
                Сделал по вашей статье просмотр товара и добавление в корзину, в метрике пустно.            
                    
                Дайте ссылку на какой-нибудь товар            
                    
                Есть возможность отправить лс?            
                    
                mekirile@gmail.com            
                    
                Вроде всё уже упростилось, просто события на кнопки вешаются, типа такого
                    <button type="submit" class="btn" name="ms2_action" value="cart/add" onclick="yaCounterXXXXX.reachGoal('VKORZINU'); return true;">В корзину</button>Для целей подойдёт            
                Мой пост немного не об этом :)            
                    
                Для тех, кто любит, чтобы совсем красиво было — правильный id заказа можно получить так:
                    miniShop2.Callbacks.Order.submit.response.success = function (response) {
...
var orderId = response.data.msorder;
...
}Не забудьте дописать response в первой строке.            
                Спасибо за решение! Помогло, но частично.
Есть одна проблема: складывается ощущение, что передает не все данные. Например из 3-ех заказов до Метрики добрался только 1.
Грешу на то, что вынужден подключать скрипты между /body и /html, так как если я ставлю их ДО /body то callback на Minishop2 не срабатывает, ибо его подключение получается ниже и он его не видит.
Да, есть вот такой коммент от Василия, но не очень понимаю что нужно с этим всем делать...? Пробовал вызывать из разных мест — эффект нулевой.
Кто может подсказать? Заранее спасибо.
            
                    Есть одна проблема: складывается ощущение, что передает не все данные. Например из 3-ех заказов до Метрики добрался только 1.
Грешу на то, что вынужден подключать скрипты между /body и /html, так как если я ставлю их ДО /body то callback на Minishop2 не срабатывает, ибо его подключение получается ниже и он его не видит.
Да, есть вот такой коммент от Василия, но не очень понимаю что нужно с этим всем делать...? Пробовал вызывать из разных мест — эффект нулевой.
Кто может подсказать? Заранее спасибо.
                Всем добрый день! 
У меня возникает следующая ошибка «Uncaught ReferenceError: miniShop2 is not defined» на данной строчке
miniShop2.Callbacks.Order.submit.response.success = function (response) {
Не подскажите как исправить?
                    У меня возникает следующая ошибка «Uncaught ReferenceError: miniShop2 is not defined» на данной строчке
miniShop2.Callbacks.Order.submit.response.success = function (response) {
Не подскажите как исправить?
                У вас minishop видимо подключается после того, как вызывается колбек. Попробуйте подключение скрипта перенести в head. 
А лучше использовать компонент готовый – modstore.pro/packages/integration/msyaecommerce там все будет работать из коробки.
                    А лучше использовать компонент готовый – modstore.pro/packages/integration/msyaecommerce там все будет работать из коробки.
А лучше использовать компонент готовый – modstore.pro/packages/integration/msyaecommerce там все будет работать из коробки.Мы используем этот компонент, но к сожалению, он не обновляется и там старый код Метрики, без вебвизора и автоматических целей.
                Добрый день! Под 
                    … и вешаем её на колбэк успешного добавления товара в корзинукак я понял вы имеете в виду, что этот код (ниже) нужно добавить в чанк tpl.msGetOrder, который входит в состав Корзины?
// добавление товара в Корзину
miniShop2.Callbacks.Cart.add.response.success = function() {
dataLayer.push({
    "ecommerce": {
        "add": {
            "products": [
                {
                    "name": productData.name,
                    "price": productData.price.replace(/\s+/g, '')
                }
            ]
        }
    }
});
}            
                Без разницы где вы разместите этот код. Конечно желательно после того как miniShop иницилизируется и вы сможете присвоить коллбек            
                    
                Спасибо за ответ! Тоже пытаюсь разобраться)), но если честно пока вообще не понимаю что значит «присвоить колбэк».
Пока из вашей схемя я уяснил следующее:
1. Часть кода №1 (Просмотр полного описания товара ) — вешаем на шаблон карточки товара. Здесь вроде все ясно.))
2. Часть кода №2, про которую я и спрашивал (Добавление товара в корзину) — нужно вешать на некий колбэк.))
и
3. Часть кода №3 (Покупка), нужно вешать на шаблон страницы Корзины, понятно с возможными нюансами в случае изменения стилей.
                    Пока из вашей схемя я уяснил следующее:
1. Часть кода №1 (Просмотр полного описания товара ) — вешаем на шаблон карточки товара. Здесь вроде все ясно.))
2. Часть кода №2, про которую я и спрашивал (Добавление товара в корзину) — нужно вешать на некий колбэк.))
и
3. Часть кода №3 (Покупка), нужно вешать на шаблон страницы Корзины, понятно с возможными нюансами в случае изменения стилей.
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                    
            
            
                    
                    
                