Jump to content


Photo
- - - - -

Отслеживание создания заказов через Яндрекс.Метрику и Google Analytics

yandex metrika яндекс метрика

29 replies to this topic

#1 SmetDenis

SmetDenis
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 18 June 2015 - 14:04

По многочисленным просьбам с форума новый рецепт - помогает отслеживать создание заказов с помощью метрики яндекса.

Первым делом, советую внимательно прочитать документацию, т.к простого копипаста может быть мало.
Она короткая, понятная и все на русском - http://help.yandex.r.../e-commerce.xml

Очень важно не только объявить переменную yaParams, но и передать её в счетчик. Иначе ничего не получится. Яндекс предлагает два способа оповещения о новом заказе
- по адресу - http://llfl.ru/049e6n
- через событие JS-событие (reachGoal) - http://llfl.ru/0g8hjc

Принцип работы у них схожий, поэтому выбирайте то что вам по душе (опять же читаем документацию по ссылке выше).
Ниже я лишь расскажу как правильно объявить переменную с информацией о заказе, которую мы будем передавать в метрику.

Как вы уже знаете, заказы в 2.2.0 и 2.1.5 резко отличаются друг от друга. Поэтому способ доступа к информации разный. Ниже будет два примера.

JBZoo 2.1.5 и ниже
Свой код я вставил и проверял в файле
media\zoo\applications\jbuniversal\templates\<ШАБЛОН>\renderer\payment_success\_default.php

Это шаблон страницы по умолчанию для "Спасибо" после создания или оплаты заказа.
 
Внимание! Код ниже предполагает, что у всех товаров в заказе одна и та же валюта. У меня это рубли. У вас может быть что-то другое, например гривны. Главное правильно указать курс.
 
<?php
$result = array(
    'order_id'      => $view->order->id,
    'order_price'   => $view->orderDetails->getTotalPrice(),
    'currency'      => "RUR", // указать код валюты магазина. В этой валюте должны быть все товары корзины
    'exchange_rate' => 1, // курс валюты. Пример 1 у.е. = 35 руб. ===> currency = RUR, exchange_rate = 35.
    'goods'         => array(),
);

$cartItems = $view->orderDetails->getOrderItems();
foreach ($cartItems as $cartItem) {
    $result['goods'][] = array(
        'id'       => $cartItem['itemId'], // или артикул $cartItem['sku']
        'name'     => $cartItem['name'],
        'price'    => $cartItem['price'],
        'quantity' => $cartItem['quantity'],
    );
}
?>
<script type="text/javascript">
    var yaParams = <?php echo json_encode($result); ?>;
        
    // вместо XXXXXX - свой номер счетчика в метрике.
    window.onload = function() {
        yaCounterXXXXXX.reachGoal('order', yaParams); // вызываем событие "order" в метрике
    };
</script>
an0g_200x0.png


JBZoo 2.2.0 и выше
Шаблон для вставки кода (для успешной оплаты)
media\zoo\applications\jbuniversal\templates\<ШАБЛОН>\renderer\payment_success\_default.php

Шаблон на создании заказа
media\zoo\applications\jbuniversal\templates\<ШАБЛОН>\renderer\basket-success\index.php

В 2.2.0 появилась продвинутая система управления валютам, поэтому товары могут быть в любой валюте.
Главное. чтобы они все были настроены.
Обратите внимание, что мы отталкиваемся от доллара как "у.е.", поэтому доллар тоже добавьте в настройки сайта.


<?php
/** @var JBCartOrder $order */
$order = $view->order;

$setCurrency = 'RUB';
$total = $order->getTotalSum()->convert($setCurrency);
$rates = $total->getCurList();
$rate = $order->val('1', 'usd'); // 1 у.е относительно доллара (должен быть настроен в валютах!)

$yaParams = array(
    'order_id'      => $view->order->id,
    'order_price'   => $total->val(),
    'currency'      => strtoupper($total->cur()),
    'exchange_rate' => $rate->val($setCurrency),
    'goods'         => array(),
);

$cartItems = $order->getItems(false);
foreach ($cartItems as $cartItem) {
    $itemPrice = $order->val($cartItem->get('total'))->convert($setCurrency);
    $yaParams['goods'][] = array(
        'id'       => $cartItem->get('item_id'), // или артикул $cartItem->find('elements._sku')
        'name'     => $cartItem->get('item_name'),
        'price'    => $itemPrice->val(),
        'quantity' => $cartItem->get('quantity', 1),
    );
}

?>
<script type="text/javascript">
    var yaParams = <?php echo json_encode($yaParams); ?>;

    // вместо XXXXXX - свой номер счетчика в метрике.
    window.onload = function() {
        if (typeof yaCounterXXXXXX != 'undefined') {
            yaCounterXXXXXX.reachGoal('order', yaParams); // вызываем событие "order" в метрике
        }
    };
</script>

Edited by SmetDenis, 26 June 2015 - 13:42.
Небольшие правки, доп адрес шаблона

  • 4
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#2 Павел Акимов

Павел Акимов
  • JBZoo User (rus)
  • User rate: 20.2
  • posts: 452
  • topics: 63

Posted 18 June 2015 - 16:53

Спасибо! :) но так у меня не заробило :)

 

Только так!

<script type="text/javascript">
var yaParams = <?php echo json_encode($yaParams); ?>;
window.onload=function(){yaCounterXXXXXX.reachGoal('order', yaParams);}
</script>

Edited by Павел, 18 June 2015 - 16:53.

  • 4

#3 SmetDenis

SmetDenis
  • Topic Starter
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 18 June 2015 - 16:57

window.onload=function(){yaCounterXXXXXX.reachGoal('order', yaParams);}

Видимо дело в том что скрипт метрики подключается внизу.

window.onload вредно менять на прямую. Лучше сделайте так

<script type="text/javascript">
var yaParams = <?php echo json_encode($yaParams); ?>;
jQuery(function ($) {
    yaCounterXXXXXX.reachGoal('order', yaParams);
});
</script>

  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#4 Павел Акимов

Павел Акимов
  • JBZoo User (rus)
  • User rate: 20.2
  • posts: 452
  • topics: 63

Posted 18 June 2015 - 17:01

window.onload вредно менять на прямую. Лучше сделайте так

 

ОШИБОЧКА!

 
 
ReferenceError: yaCounter30618092 is not defined
 

  • 0

#5 SmetDenis

SmetDenis
  • Topic Starter
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 18 June 2015 - 17:11

А есть ссылка? =)
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#6 Павел Акимов

Павел Акимов
  • JBZoo User (rus)
  • User rate: 20.2
  • posts: 452
  • topics: 63

Posted 18 June 2015 - 17:15

А есть ссылка? =)

http://profstroimag.ru/- сделайте заказ! 

 

Код под надписью "Заказ успешно создан"


  • 0

#7 SmetDenis

SmetDenis
  • Topic Starter
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 18 June 2015 - 19:37

Да, действительно. Похоже вариант с window.onload пока что будет правильный.
Хотя по мне не эстетично :)

Метрика создается не на загрузку DOM, а на загрузку всего контента страницы.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#8 kuzmahan

kuzmahan
  • JBZoo User (rus)
  • User rate: 0.3
  • posts: 96
  • topics: 22

Posted 22 June 2015 - 12:50

Получилось ли у кого то сделать параметры визитов не по событию. а по адресу? Киньте пример.

 

<?php
$result = array(
    'order_id'      => $view->order->id,
    'order_price'   => $view->orderDetails->getTotalPrice(),
    'currency'      => "RUR", // указать код валюты магазина. В этой валюте должны быть все товары корзины
    'exchange_rate' => 1, // курс валюты. Пример 1 у.е. = 35 руб. ===> currency = RUR, exchange_rate = 35.
    'goods'         => array(),
);
 
$cartItems = $view->orderDetails->getOrderItems();
foreach ($cartItems as $cartItem) {
    $result['goods'][] = array(
        'id'       => $cartItem['itemId'], // или артикул $cartItem['sku']
        'name'     => $cartItem['name'],
        'price'    => $cartItem['price'],
        'quantity' => $cartItem['quantity'],
    );
}
?>
<script type="text/javascript">
    var yaParams = <?php echo json_encode($result); ?>;
        
    // вместо XXXXXX - свой номер счетчика в метрике.
 
(function (d, w, c) {
 (w[c] = w[c] || []).push(function() {
try { var yaCounter14314105 = new Ya.Metrika({id: 14314105, params:window.yaParams||{ }}); }
catch(e) { }
});
 
    };
</script>

 

 

вот так не работает.


  • 0

#9 isay777

isay777
  • JBZoo User (rus)
  • User rate: 113.4
  • posts: 1878
  • topics: 232

Posted 22 June 2015 - 13:26

yaparams передается null 

 

У меня то же не заработало 


  • 0
ХОСТИНГ для сайтов jbzoo (все попугаи)

#10 isay777

isay777
  • JBZoo User (rus)
  • User rate: 113.4
  • posts: 1878
  • topics: 232

Posted 22 June 2015 - 13:34

 

Спасибо! :) но так у меня не заробило :)

 

Только так!

<script type="text/javascript">
var yaParams = <?php echo json_encode($yaParams); ?>;
window.onload=function(){yaCounterXXXXXX.reachGoal('order', yaParams);}
</script>

 

Павел у вас работает?


  • 0
ХОСТИНГ для сайтов jbzoo (все попугаи)





Also tagged with one or more of these keywords: yandex, metrika, яндекс, метрика

Click to return to top of page in style!