Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

google tag-manager ecommerce


Recommended Posts

Подскажите как правильно настроить ecommerce на tag-manager у, вроде нашел модуль https://www.opencart.com/index.php?route=marketplace/extension/info&extension_id=22039&filter_search=Google Analytics&filter_download_id=41 посмотрел код на странице успешного зараза, там есть скрипт в котором вся необходимая инфа а в tag manager не отправляет

Спойлер

<script>
gtag('event', 'purchase', {
"transaction_id": "81", "affiliation": "Империя Золота", "value": 2025, "currency": "UAH", "shipping": 0,
"items": [ 
{ "id": "СП1107и", "name": "Пуссеты золотые (сережки-гвоздики)", "category": "Серьги/Женские ювелирные украшения/Каталог ювелирных изделий из золота/Золотые серьги/Серьги гвоздики (пусеты)", "variant": "", "quantity": 1, "price": "2025" },
 ]
 });
</script>

 

 

Надіслати
Поділитися на інших сайтах


вот здесь подробно расписано как через tag manager настроить расширенный ecommerce - тут (но не OC!). 

Для OC примерно такие скрипты писал:

        <script type="text/javascript">
                    window.dataLayer = window.dataLayer || []; 
                    if(typeof window.dataLayer != 'undefined') {
                         dataLayer.push({
                            "ecommerce": {
                                "detail": {
                                    "products": [
                                        {
                                            "id": "{{ metrika_product_id }}",
                                            "name" : "{{ metrika_product_name }}",
                                            "price": {{ metrika_product_price }},
                                            "brand": "{{ metrika_product_manufacturer }}",
                                            "category": "{{ metrika_product_category }}"
                                        }
                                    ]
                                }
                            },
							"event": "gtm-ee-event", 
							"gtm-ee-event-category": "Enhanced Ecommerce",
							"gtm-ee-event-action": "Product Details",
							"gtm-ee-event-non-interaction'": "True"});
                    }
        </script>

но там много чего еще надо писать (контроллер, например) 

Надіслати
Поділитися на інших сайтах


2 часа назад, drnemo сказал:

вот здесь подробно расписано как через tag manager настроить расширенный ecommerce - тут (но не OC!). 

Для OC примерно такие скрипты писал:


        <script type="text/javascript">
                    window.dataLayer = window.dataLayer || []; 
                    if(typeof window.dataLayer != 'undefined') {
                         dataLayer.push({
                            "ecommerce": {
                                "detail": {
                                    "products": [
                                        {
                                            "id": "{{ metrika_product_id }}",
                                            "name" : "{{ metrika_product_name }}",
                                            "price": {{ metrika_product_price }},
                                            "brand": "{{ metrika_product_manufacturer }}",
                                            "category": "{{ metrika_product_category }}"
                                        }
                                    ]
                                }
                            },
							"event": "gtm-ee-event", 
							"gtm-ee-event-category": "Enhanced Ecommerce",
							"gtm-ee-event-action": "Product Details",
							"gtm-ee-event-non-interaction'": "True"});
                    }
        </script>

но там много чего еще надо писать (контроллер, например) 

Спойлер

<?xml version="1.0" encoding="utf-8"?>
<modification>
  <name>Google Analytics Comércio Eletrônico para OpenCart 3</name>
  <code>google-analytics-ecommerce</code>
  <version>4.0.0</version>
  <author>OpenCart Brasil</author>
  <link>http://www.opencartbrasil.com.br</link>
  <file path="catalog/model/checkout/order.php">
    <operation>
      <search><![CDATA[public function getOrder($order_id) {]]></search>
      <add position="before"><![CDATA[
        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;
            }
        }
      ]]></add>
    </operation>
  </file>
  <file path="catalog/controller/checkout/success.php">
    <operation>
      <search><![CDATA[public function index() {]]></search>
      <add position="after"><![CDATA[
        $data['gtag_event'] = '';

        if (isset($this->session->data['order_id'])) {
            if ($this->config->get('analytics_google_status')) {
                $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>';
                }
            }
        }
      ]]></add>
    </operation>
  </file>
  <file path="catalog/view/theme/*/template/common/success.twig">
    <operation>
      <search><![CDATA[{{ footer }}]]></search>
      <add position="before"><![CDATA[
{% if gtag_event %}{{ gtag_event }}{% endif %}
      ]]></add>
    </operation>
  </file>
</modification>

этот контролер подойдет, ну ток значения переменных поменять?

 

Надіслати
Поділитися на інших сайтах


8 минут назад, axaxaxa сказал:
  Показать контент


<?xml version="1.0" encoding="utf-8"?>
<modification>
  <name>Google Analytics Comércio Eletrônico para OpenCart 3</name>
  <code>google-analytics-ecommerce</code>
  <version>4.0.0</version>
  <author>OpenCart Brasil</author>
  <link>http://www.opencartbrasil.com.br</link>
  <file path="catalog/model/checkout/order.php">
    <operation>
      <search><![CDATA[public function getOrder($order_id) {]]></search>
      <add position="before"><![CDATA[
        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;
            }
        }
      ]]></add>
    </operation>
  </file>
  <file path="catalog/controller/checkout/success.php">
    <operation>
      <search><![CDATA[public function index() {]]></search>
      <add position="after"><![CDATA[
        $data['gtag_event'] = '';

        if (isset($this->session->data['order_id'])) {
            if ($this->config->get('analytics_google_status')) {
                $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>';
                }
            }
        }
      ]]></add>
    </operation>
  </file>
  <file path="catalog/view/theme/*/template/common/success.twig">
    <operation>
      <search><![CDATA[{{ footer }}]]></search>
      <add position="before"><![CDATA[
{% if gtag_event %}{{ gtag_event }}{% endif %}
      ]]></add>
    </operation>
  </file>
</modification>

этот контролер подойдет, ну ток значения переменных поменять?

 

да, есть такой модуль, НО он только для продажи - нет просмотров товара, добавление/исключение в корзину - все это расширенная аналитика "Enhanced Ecommerce" (модули или платные или самому писать)

Надіслати
Поділитися на інших сайтах


21 час назад, drnemo сказал:

да, есть такой модуль, НО он только для продажи - нет просмотров товара, добавление/исключение в корзину - все это расширенная аналитика "Enhanced Ecommerce" (модули или платные или самому писать)

мне и нужно хотя бы саму продажу отслеживать, когда вылетает сообщение о успешном оформлении

 

Надіслати
Поділитися на інших сайтах


21 час назад, drnemo сказал:

да, есть такой модуль, НО он только для продажи - нет просмотров товара, добавление/исключение в корзину - все это расширенная аналитика "Enhanced Ecommerce" (модули или платные или самому писать)

можете дать свой вариант для отслеживания самой покупки товара, с контролером 

Змінено користувачем axaxaxa
Надіслати
Поділитися на інших сайтах


53 минуты назад, axaxaxa сказал:

можете дать свой вариант для отслеживания самой покупки товара, с контролером

Делал для одновременного использования с эл. коммерцией яндекса

Это в шаблоне common/success перед футером

Спойлер

                        <script type="text/javascript">
                            if(typeof dataLayer != 'undefined') {
                                dataLayer.push({
                                    "ecommerce": {
                                        "purchase": {
                                            "actionField": {
                                                "id" : "{{ metrika_order_id }}"
                                            },
                                            "products": [
                                                {% for product in metrika_order_products %}
												{
                                                    "id": "{{ product.metrika_product_id }}",
                                                    "name": "{{ product.metrika_product_name }}",
                                                    "price": {{ product.metrika_product_price }},
                                                    "quantity": {{ product.metrika_product_quantity }},
                                                    "brand": "{{ product.metrika_product_manufacturer }}",
                                                    "category": "{{ product.metrika_product_category }}"
                                                },
                                                {% endfor %}
                                            ]
                                        }
                                    },
                                   'event': 'gtm-ee-event',
								   'gtm-ee-event-category': 'Enhanced Ecommerce',
 									'gtm-ee-event-action': 'Purchase',
									'gtm-ee-event-non-interaction': 'False',
                                });
                            }
                        </script>

 

это в контроллере checkout/success.php

в начале переменные

        $data['metrika_order_products'] = array();
        $data['metrika_order_id'] = false;

после if (isset($this->session->data['order_id'])) {

 

Спойлер

			        $data['metrika_order_id'] = $this->session->data['order_id'];
                    $this->load->model('account/order');
                    $this->load->model('catalog/category');
                    $this->load->model('catalog/product');
                    $order_products = $this->model_account_order->getOrderProducts($data['metrika_order_id']);

                    foreach($order_products as $order_product)
                    {
                        $product_info = $this->model_catalog_product->getProduct($order_product["product_id"]);
                        $categories_product = $this->model_catalog_product->getCategories($order_product["product_id"]);
                        if($product_info)
                        {
                            $metrika_product_category = "";
                            if(count($categories_product) > 0)
                            {
                                $category = array_pop($categories_product);
                                $category_info = $this->model_catalog_category->getCategory($category['category_id']);
                                if ($category_info)
                                    $metrika_product_category = $category_info['name'];
                            }

                            $data['metrika_order_products'][] = array(
                                "metrika_product_id" => $order_product["product_id"],
                                "metrika_product_name" => $order_product["name"],
                                "metrika_product_price" => $order_product["price"],
                                "metrika_product_quantity" => $order_product["quantity"],
                                "metrika_product_manufacturer" => $product_info['manufacturer'],
                                "metrika_product_category" => $metrika_product_category
                            );
                        }
                    }

 

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

  • +1 2
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.