Помогите настроить цель Метрики в Minishop2

Всем привет. Достаточно тривиальная задача, наверное, кто-то настраивал у себя, но у меня, вот, не получается.
Хочу добавить цель для интернет магазина в Яндекс.Метрике — успешный заказ. Как это делается описано вот здесь: help.yandex.ru/metrika/content/e-commerce.xml

Для того, чтобы передать параметры счетчику используется следующий код:
var yaParams = {
  order_id: "12345",
  order_price: 123.45, 
  currency: "RUR",
  exchange_rate: 1,
  goods: 
     [
        {
          id: "1", 
          name: "название товара", 
          price: 100,
          quantity: 1
        } 
      ]
};


Возникают вопросы
  • как пройти по всем товарам, которые есть в корзине, чтобы получить названия и цены всех товаров в заказе?
  • На какое событие ставить цель? На клик по кнопке Оформить заказ, вот так?
  • <button type="submit" name="ms2_action" onclick="yaCounter23103907.reachGoal('ORDER'); return true;"  value="order/submit" class="btn submit ms2_link">[[%ms2_frontend_order_submit]]</button>
    < Либо на событие: переход на следующую после корзины страницы? Тогда возникает вопрос, если это был заказ с самовывозом, то там формируется ссылка вида ?msorder=idзаказа, но если люди оплачивают (стоит модуль Яндекс.Кассы — mspYaCassa), то там можно самому задавать страницу успешной оплаты, и соответственно, как уже на произвольной странице тогда получить все данные уже оплаченного заказа?
mekirile
17 марта 2015, 20:53
modx.pro
3
5 015
0

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

Сергей Фещуков
18 марта 2015, 13:04
+1
Первое с ходу не подскажу. А по поводу второго — необходимо добавить в свои скрипты:
miniShop2.Callbacks.Order.submit.response.success = function () {
    yaCounter23103907.reachGoal('ORDER');
}
    mekirile
    18 марта 2015, 13:58
    0
    В смысле просто в шаблон страницы добавить?
    <script>
    miniShop2.Callbacks.Order.submit.response.success = function () {
        yaCounter23103907.reachGoal('ORDER');
    }
    </script>
    А то событие, которое на кнопку повесил, убрать тогда?
      Сергей Фещуков
      18 марта 2015, 14:00
      0
      Да, событие на кнопке надо убрать, потому что это неправильно. Событие будет срабатывать при любом результате, даже если форма будет с ошибками и заказ не будет оформлен. Что я написал, это обработчик события, когда заказ успешно оформлен.
      Можно так и в шаблон добавить, если собственных скриптов нигде нет. В любое место.
        mekirile
        19 марта 2015, 19:09
        0
        Спасибо, это срабатывает. Но когда я пытаюсь передать к этой цели параметры заказа, то тут уже возникает ошибка!
        Вот эта штука уже не работает
        miniShop2.Callbacks.Order.submit.response.success = function () {
        var yaParams = {
          order_id: "[[+num]]",
          order_price: [[+cost]], 
          currency: "RUR"
        
        };
         yaCounter23103907.reachGoal('SUCORD', yaParams);


        Потому что как я понимаю непосредственно заказ формируется несколько позже и я не могу передавать в параметры его плейсхолдеры. Как лучше поступить? Может есть ккой-то другой более подходящий callback?
          Сергей Фещуков
          19 марта 2015, 19:13
          0
          Я так подумал, после заказа происходит же переход на страницу с самим заказом. Так может в чанк tpl.msOrder.success добавить этот код. Правда после каждого обновления этой страницы цель будет срабатывать.
            mekirile
            19 марта 2015, 19:30
            0
            Да, наверное, это сработает. Но есть еще загвоздка) пользователь остается на этой странице в случае если он выбрал оплату наличными при самовывозе, если же он собирается платить онлайн, то соответственно переходит на страницу оформления платежа- агрегатор Яндекс касса. как же быть в этом случае?
              Сергей Фещуков
              19 марта 2015, 19:33
              0
              Я думал после оплаты переходишь на страницу заказа. Честно говоря, с плагином mspYaCassa я не работал, поэтому не могу здесь подсказать что-то.
                mekirile
                20 марта 2015, 11:58
                0
                Замучал тебя, извини)

                Я подумал, что можно не загоняться пока с событием заказа, а просто забрать полную стоимость товаров в корзине. Как мне её тогда получить на странице Корзины?
    Володя
    20 марта 2015, 12:35
    0
    У яндекс все вроде написано — github.com/nixsolutions/yandex-php-library/blob/master/src/Yandex/Metrica/Management/GoalsClient.php#L42
    Нужно подключить библиотеку и в плагине на оплату заказа можно сделать…
      mekirile
      20 марта 2015, 12:44
      0
      Спасибо. Моих умений и знаний, к сожалению, недостаточно. Пока повесил просто на событие miniShop2.Callbacks.Order.submit.response.success

      Может попозже допетрю как передать параметры заказа или кто-то столкнется с подобной проблемой.
        ck
        ck
        06 марта 2017, 18:59
        0
        Подскажите, как в miniShop2.Callbacks.Order.submit.response.success передать данные о совершённом заказе (ID, стоимость, кол-во и пр.)?
            ck
            ck
            07 марта 2017, 09:48
            0
            Спасибо большое!
            Нашёл вчера этот топик. Всё хорошо, только ID заказа там генерируется случайно.
            Как достать его из API или из сессии?
              Антон Тарасов
              07 марта 2020, 23:42
              0
              miniShop2.Callbacks.Order.submit.response.success = function (response) {
              var orderId = response.data.msorder;
              }
          Михаил
          05 июня 2022, 10:24
          0
          Просто нужно скобки { } в скрипте отделить пробелами
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            15