Настройка E-commerce Google Analytics на OpenCart 2.x — 3.x

Электронная торговля в Google Analytics позволяет нам собирать данные о транзакциях на сайте. С помощью электронной торговли мы можем узнать:

  1. Какой товар покупают.
  2. Количество товара.
  3. Сумму заказа.
  4. Популярные товары.
  5. Категорию товара.

Рассмотрим настройку Электронной торговли для CMS OpenCart 2.x-3.x при помощи двух методов —  ga.js и gtag.js.

 Метод Ga.js 

Электронная торговля для CMS OpenCart 2.x-3.x, метод ga.js. Для того чтобы начать установку, на сайте должен быть установлен счетчик Google Analytics:

<!-- Google Analytics -->

<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','https://www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-XXXXXXXXX', 'auto');  

ga('send', 'pageview');

</script>

<!-- Google Analytics -->

Настройка будет в три этапа. Нам нужно будет изменить некоторые файлы на сайте, добавив необходимые коды.

Первый файл который будем изменять order.php, находится в директории catalog/model/checkout/order.php 

В нем добавляем следующий код (который будет генерировать и отображать нам данные):

public function getOrderGAC($order_id) {

        $order_query = $this->db->query("SELECT o.order_id, o.store_name, o.language_id, o.currency_code, o.currency_value, o.total FROM `" . DB_PREFIX . "order` o WHERE o.order_id = '" . (int)$order_id . "'"); 

        if ($order_query->num_rows) {

            $language_id = $order_query->row['language_id'];          

            $order_product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'"); 

            foreach ($order_product_query->rows as $product) {

                $option_data = ''; 

                $order_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$product['order_product_id'] . "'");

                 foreach ($order_option_query->rows as $option) {

                    if ($option['type'] != 'file') {

                        $option_data .= $option['name'] . ': ' . (utf8_strlen($option['value']) > 20 ? utf8_substr($option['value'], 0, 20) . '..' : $option['value']) . ' - ';

                    }

                } 

                $option_data = rtrim($option_data, ' - '); 

                $category_data = ''; 

                $category_query = $this->db->query("SELECT cd.name FROM `" . DB_PREFIX . "product_to_category` pc INNER JOIN `" . DB_PREFIX . "category_description` cd ON pc.category_id = cd.category_id WHERE pc.product_id = '" . (int)$product['product_id'] . "' AND cd.language_id = '" . (int)$language_id . "'"); 

                $i = 0;

                foreach ($category_query->rows as $category) {

                    $i++;

                    if ($i <= 5) {

                        $category_data .= $category['name'] . '/';

                    }

                } 

                $category_data = rtrim($category_data, '/');              

                if ($option_data) {

                    $name = utf8_substr($product['name'] . ' - ' . $option_data, 0, 80);

                } else {

                    $name = utf8_substr($product['name'], 0, 80);

                } 

                $products[] = array(

                    'name'     => $name,

                    'sku'      => $product['model'],

                    'category' => $category_data,

                    'price'    => $this->currency->format($product['price'] + ($this->config->get('config_tax') ? $product['tax'] : 0), false, $order_query->row['currency_value']),

                    'quantity' => $product['quantity']

                );

            } 

            return array(

                'order_id'      => $order_query->row['order_id'],

                'store_name'    => $order_query->row['store_name'],

                'products'      => $products,

                'total'         => $this->currency->format($order_query->row['total'], false, $order_query->row['currency_value']),

                'currency_code' => $order_query->row['currency_code']

            );

        } else {

            return false;

        }  

    }

Второй файл который будем править — success.php в директории catalog/controller/checkout/success.php 

В нем добавляем следующий код (данный код будет считывать данные из кода который установили первым):

$data['gaTracking'] = ''; 

        if (isset($this->session->data['order_id'])) {

            $this->load->model('checkout/order'); 

            $orderInfo  = $this->model_checkout_order->getOrderGAC($this->session->data['order_id']); 

            if ($orderInfo) {

                $data['gaTracking'] .= sprintf("ga('ecommerce:addTransaction', {'id': '%s', 'affiliation': '%s', 'revenue': '%s', 'currency': '%s'});",

                                                    $orderInfo['order_id'],

                                                    $orderInfo['store_name'],

                                                    $orderInfo['total'],

                                                    $orderInfo['currency_code']

                                                    ) . "\n";

                $data['gaTracking'] = rtrim($data['gaTracking'], '\n');

                foreach ($orderInfo['products'] as $product) {

                    $data['gaTracking'] .= sprintf("ga('ecommerce:addItem', {'id': '%s', 'name': '%s', 'sku': '%s', 'category': '%s', 'price': '%s', 'quantity': '%s', 'currency': '%s'});",

                                                        $orderInfo['order_id'],

                                                        $product['name'],

                                                        $product['sku'],

                                                        $product['category'],

                                                        $product['price'],

                                                        $product['quantity'],

                                                        $orderInfo['currency_code']

                                                        ) . "\n";

                }

            }

        }

Третий и последний файл который нужно править success.tpl в директории — catalog/view/theme/***********/template/common/success.tpl

****** — Это папка с Вашей Темой. 

В нем добавляем следующий код (который будет на странице “спасибо за заказ” и после отправки данных будет закрывать передачу, чтобы при обновлении страницы избежать дублирования транзакции):

<?php

if(isset($gaTracking)) {

if($gaTracking) {

echo "<script>" . "\n";

echo "ga('require', 'ecommerce');" . "\n";

echo $gaTracking;

echo "ga('ecommerce:send');" . "\n";

echo "</script>" . "\n";

}

}

?>

Изменение файлов мы закончили, теперь нужно включить все в Google Analytics:  Администратор — Представление — Настройка Электронной торговли.

Включаем отслеживания электронной торговли.

Включаем отслеживания электронной торговли.

Включаем отслеживания электронной торговли.

Наша настройка Электронной торговли завершена. Если у Вас не получается либо вы не имеете опыта в редактировании файлов, можно сделать с помощью готового модификатора который вы можете скачать — Модификатор Метод GA.js

Как установить модификатор? Нам нужно перейти в админ панель управления сайтом она доступна по ссылке: https://**************/admin/
******** — домен вашего сайта.

В Админ панели выбираем пункт: Модули — Установка расширений. Мы попадаем в окно установки.

Установка расширений.

Теперь выбираем загрузить файл и выбираем скачанный нами файл.

И ждем когда завершиться процес установки. Все мы установили наши настройки. 

В результате мы получаем в Google Analytics наши транзакции. 

Транзакции в Google AnalyticsМетод Gtag.js 

Электронная торговля для CMS OpenCart 2.x-3.x метод gtag.js. В первую очередь должен быть установлен счетчик на сайте:

<!-- Global site tag (gtag.js) - Google Analytics -->

<script async src="https://www.googletagmanager.com/gtag/js?id=UA-74590809-2"></script>

<script>

  window.dataLayer = window.dataLayer || [];

  function gtag(){dataLayer.push(arguments);}

  gtag('js', new Date()); 

  gtag('config', 'UA-XXXXXXXXXX');

</script>

Тут все тоже самое как с предыдущим методом — изменяем файлы или скачиваем модификатор и устанавливаем его.

Настройка будет также в три этапа.

Первый файл который будем изменять находится в директории catalog/model/checkout/order.php

 В нем добавляем следующий код (который будет генерировать и отображать нам данные):

public function getGTAG($order_id) {

            $order_query = $this->db->query("SELECT o.order_id, o.store_name, o.language_id, o.currency_code, o.currency_value, o.total FROM `" . DB_PREFIX . "order` o WHERE o.order_id = '" . (int)$order_id . "'");

            if ($order_query->num_rows) {

                $language_id = $order_query->row['language_id'];

                $currency_value = $order_query->row['currency_value']; 

                $order_product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'");

                foreach ($order_product_query->rows as $product) {

                    $i = 0;

                    $category_data = '';

                    $category_query = $this->db->query("SELECT cd.name FROM `" . DB_PREFIX . "product_to_category` pc INNER JOIN `" . DB_PREFIX . "category_description` cd ON pc.category_id = cd.category_id WHERE pc.product_id = '" . (int)$product['product_id'] . "' AND cd.language_id = '" . (int)$language_id . "'");

                    foreach ($category_query->rows as $category) { $i++;

                        if ($i <= 5) {

                            $category_data .= $category['name'] . '/';

                        }

                    }

                    $category_data = rtrim($category_data, '/'); 

                    $option_data = '';

                    $order_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$product['order_product_id'] . "'");

                    foreach ($order_option_query->rows as $option) {

                        if ($option['type'] != 'file') {

                            $option_data .= $option['name'] . ': ' . (utf8_strlen($option['value']) > 20 ? utf8_substr($option['value'], 0, 20) . '..' : $option['value']) . ' - ';

                        }

                    }

                    $option_data = rtrim($option_data, ' - '); 

                    $products[] = array(

                        'id' => $product['model'],

                        'name' => $product['name'],

                        'category' => $category_data,

                        'variant' => $option_data,

                        'price' => (($product['price'] + ($this->config->get('config_tax') ? $product['tax'] : 0)) * $currency_value),

                        'quantity' => $product['quantity']

                    );

                } 

                $order_shipping = 0;

                $order_total_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order_total` WHERE order_id = '" . (int)$order_id . "' ORDER BY sort_order ASC");

                foreach ($order_total_query->rows as $total) {

                    if ($total['value'] > 0) {

                        if ($total['code'] == "shipping") {

                            $order_shipping += $total['value'];

                        }

                    }

                } 

                return array(

                    'transaction_id' => $order_query->row['order_id'],

                    'affiliation' => $order_query->row['store_name'],

                    'value' => $order_query->row['total'] * $currency_value,

                    'currency' => $order_query->row['currency_code'],

                    'shipping' => $order_shipping * $currency_value,

                    'items' => $products

                );

            } else {

                return false;

            }

        } 

Второй файл для правки success.phpcatalog/controller/checkout/success.php

 В нем добавляем следующий код (который будет считывать данные из кода, который установили первым):

$data['gtag_event'] = ''; 

        if (isset($this->session->data['order_id'])) {

            $gtag = false; 

            if ($this->config->get('google_analytics_status')) {

                $gtag = true;

            } else if ($this->config->get('config_google_analytics_status')) {

                $gtag = true;

            } else if ($this->config->get('config_google_analytics')) {

                $google_analytics = $this->config->get('config_google_analytics');

                if (!empty($google_analytics)) {

                    $gtag = true;

                }

            } 

            if ($gtag) {

                $this->load->model('checkout/order');

                $event_info = $this->model_checkout_order->getGTAG($this->session->data['order_id']);

 

                if ($event_info) {

                    $data['gtag_event'] .= '<script>'."\n";

                    $data['gtag_event'] .= 'gtag(\'event\', \'purchase\', {'."\n";

                    $data['gtag_event'] .= sprintf('"transaction_id": "%s", "affiliation": "%s", "value": %s, "currency": "%s", "shipping": %s,', $event_info['transaction_id'], $event_info['affiliation'], $event_info['value'], $event_info['currency'], $event_info['shipping'])."\n";

                    if (isset($event_info['items']) && is_array($event_info['items'])) {

                        $data['gtag_event'] .= '"items": [ '."\n";

                        foreach ($event_info['items'] as $item) {

                            $data['gtag_event'] .= sprintf('{ "id": "%s", "name": "%s", "category": "%s", "variant": "%s", "quantity": %s, "price": "%s" },', $item['id'], $item['name'], $item['category'], $item['variant'], $item['quantity'], $item['price'])."\n";

                        }

                        $data['gtag_event'] .= ' ]'."\n";

                    }

                    $data['gtag_event'] .= ' });'."\n";

                    $data['gtag_event'] .= '</script>';

                }

            }

        }

Третий и последний файл который нужно править catalog/view/theme/***********/template/common/success.tpl

****** — папка с Вашей Темой.

 В нем добавляем следующий код (который будет на странице “спасибо за заказ” активировать второй код, и после отправки данных будет закрывать передачу, чтобы при обновлении страницы не было дублей в передаче данных):

 <?php if (isset($gtag_event) && !empty($gtag_event)) { echo $gtag_event; } ?>

Наша настройка Электронной торговли завершена методом gtag.js. Также можете скачать готовый модификатор — Модификатор метод Gtag.js

Установку делаем как описано в методе ga.js, разницы между установками и настройками куда и что ставить нет.

Разница между методами в разном написании написании кода.

Если у Вас не получилось или остались вопросы пишите в комментариях.

Коды безопасны и актуальны, взяты на GitHub: https://github.com/opencartbrasil/google-analytics-ecommerce/blob/master/install.xml

Tags: , ,

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *