Google E-Commerce и OpenCart 2.x

Тема в разделе "Общие вопросы", создана пользователем grey0207, 14 янв 2016.

  1. grey0207

    grey0207 Активный пользователь

    Сообщения:
    126
    Симпатии:
    33
    Добрый день!

    Хотелось бы узнать, кто подключал Google E-Commerce (стандартную или расширенную коммерцию). Как работает? Как подключали (вносили вручную правки в код или использовали модули, например Google Analytics E-commerce Tracking PRO или подобные)?
     
  2. grey0207

    grey0207 Активный пользователь

    Сообщения:
    126
    Симпатии:
    33
    Что, никто не использует? o_O
     
  3. Vlad

    Vlad Эксперт

    Сообщения:
    3.882
    Симпатии:
    937
    видимо нет. Я нет!
     
  4. Moioz

    Moioz Новичок

    Сообщения:
    13
    Симпатии:
    2
    Желание подключиться есть, но надо привлекать какого-то спеца. Пока стоит подождать и посмотреть на опыт других ;)
     
  5. grey0207

    grey0207 Активный пользователь

    Сообщения:
    126
    Симпатии:
    33
    Пока в отчете Google Analytics в разделе Электронная торговля удалось вывести ID транзакции (что соответствует номеру заказа) и сумму заказа. Почему-то название товара не выводит. Вот что я нашел и использовал. Может кто подскажет еще чего...
    Для OpenCart 2.x. Создаем GA_ecommerce.ocmod.xml и добавляем в него код:
    Код:
    <?xml version="1.0" encoding="utf-8"?>
    <modification>
      <name>Google Analytics - Ecommerce Tracking</name>
      <code>default</code>
      <version>1.0</version>
      <author>kikasso</author>
        <file path="catalog\controller\checkout\success.php">
            <operation>
            <search><![CDATA[if (isset($this->session->data['order_id'])) {]]></search>
                <add position="after"><![CDATA[
                $data['order_id'] = $this->session->data['order_id'];
                            $data['store_name'] = $this->config->get('config_name');
                            $this->load->model('account/order');
                            $data['order_info'] = $this->model_account_order->getOrder($this->session->data['order_id']);
                            $data['order_products'] = $this->model_account_order->getOrderProducts($this->session->data['order_id']);
                            $tax = 0;
                            foreach($data['order_products'] as $row){
                                $tax = $tax + $row['tax'];
                            }
                            $data['tax'] = $tax;
                ]]></add>
            </operation>
        </file>
        <file path="catalog\view\theme\*\template\common\success.tpl">
            <operation>
                <search><![CDATA[<?php echo $footer; ?>]]></search>
                <add position="before"><![CDATA[
                <?php if(isset($order_id) && $order_id) { ?>
        <script type="text/javascript">
            var _gaq = _gaq || [];
            _gaq.push(['_setAccount', 'UA-xxxxxxxx-x']);
            _gaq.push(['_set', 'currencyCode', '<?php $order_info["currency_code"]; ?>']);
            _gaq.push(['_trackPageview']);
            _gaq.push(['_addTrans',
              '<?php echo $order_id; ?>',           // transaction ID - required
              '<?php echo $store_name; ?>',  // affiliation or store name
              '<?php echo $order_info["total"]; ?>',          // total - required
              '<?php echo $tax; ?>',           // tax
              '<?php echo $order_info["shipping_city"]; ?>',       // city
              '<?php echo $order_info["shipping_zone"]; ?>',     // state or province
              '<?php echo $order_info["shipping_country"]; ?>'             // country
            ]);
            <?php foreach ($order_products as $row) { ?>
              _gaq.push(['_addItem',
                '<?php echo $order_id; ?>',           // transaction ID - required
                '<?php echo $row["model"]; ?>',           // SKU/code - required
                '<?php echo $row["name"]; ?>',        // product name
                '<?php echo $row["price"]; ?>',          // unit price - required
                '<?php echo $row["quantity"]; ?>'               // quantity - required
              ]);
            <?php } ?>
             _gaq.push(['_trackTrans']);
            (function() {
              var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
              ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
              var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
            })();
        </script>
        <?php } ?>
                ]]></add>
            </operation>
        </file>  
    </modification>
    Файл GA_ecommerce.ocmod.xml заливаем в каталог /system/ (или в админке добавляем) и обновляем модификатор. UA-xxxxxxxx-x в коде меняем на свой ID в Google Analytics.
     
    Dmitriy10, pifagor82 и Slait нравится это.
  6. Vlad

    Vlad Эксперт

    Сообщения:
    3.882
    Симпатии:
    937
    где не выводит? В коде есть вывод названия товара.
     
  7. grey0207

    grey0207 Активный пользователь

    Сообщения:
    126
    Симпатии:
    33
    Да, все верно, в коде есть вывод названия товара. Но в Google Analytics такой результат: http://snag.gy/N9kvw.jpg
    1) т.е. не выводится продукт (name) и идентификатор продукта (model)
    2) Категория не выводится, но и не должна, так как в коде нет ее.
    3) Источник выводится правильно.
     
  8. Джо

    Джо Новичок

    Сообщения:
    24
    Симпатии:
    0
    Добрый день, файл сделал, установил, но в аналитиксе информация не появляется, скажите надо как-то в админке ещё включать?
     
  9. grey0207

    grey0207 Активный пользователь

    Сообщения:
    126
    Симпатии:
    33
    В админке нет, но надо включить в самом Google Analytics: Администратор - Представление - Настройки электронной торговли. Статус и Включение отчетов по сопутствующим товарам нажать на ВКЛ. Расширенную электронную торговлю не включать.

    Отчеты тут: Отчеты - Конверсии - Электронная торговля
     
  10. Джо

    Джо Новичок

    Сообщения:
    24
    Симпатии:
    0
    Спасибо, попробую, действительно было не всё включено.
     
  11. grey0207

    grey0207 Активный пользователь

    Сообщения:
    126
    Симпатии:
    33
    Всем привет. Выкладываю еще один вариант модификатора для Google E-Commerce. Отличие от прошлого в том, что этот работает полностью. И выводит наконец таки Имя продукта, Идентификатор продукта (Модель/Артикул), Категорию продукта и т.д. Кто установил старый, его надо удалить перед использованием этого.
    HTML:
    <?xml version="1.0" encoding="utf-8"?>
    <modification>
      <name>Integracao com Google Analytics E-commerce.</name>
      <code>google-analytics-ecommerce</code>
      <version>1.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 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;
            }  
        }
            ]]>
          </add>
        </operation>
      </file>
    
      <file path="catalog/controller/checkout/success.php">
        <operation>
          <search>
            <![CDATA[
            if (isset($this->session->data['order_id'])) {
            ]]>
          </search>
          <add position="before">
            <![CDATA[
            $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";
                    }
                }
            }
            ]]>
          </add>
        </operation>
      </file>
    
      <file path="catalog/view/theme/*/template/common/success.tpl">
        <operation>
          <search>
            <![CDATA[
    <?php echo $footer; ?>
            ]]>
          </search>
          <add position="before">
            <![CDATA[
    <?php
    if(isset($gaTracking)) {
    if($gaTracking) {
    echo "<script>" . "\n";
    echo "ga('require', 'ecommerce');" . "\n";
    echo $gaTracking;
    echo "ga('ecommerce:send');" . "\n";
    echo "</script>" . "\n";
    }
    }
    ?>
            ]]>
          </add>
        </operation>
      </file>
    </modification>
     
    Dmitriy10 и Vlad нравится это.
  12. alexc

    alexc Новичок

    Сообщения:
    2
    Симпатии:
    0
    Спасибо. В данном варианте идентификатор менять не нужно я так понял..
     
  13. grey0207

    grey0207 Активный пользователь

    Сообщения:
    126
    Симпатии:
    33
    Идентификатор чего?
     
  14. alexc

    alexc Новичок

    Сообщения:
    2
    Симпатии:
    0
    Идентификатор аккаунта в Аналитикс: UA-*****-*
     
  15. grey0207

    grey0207 Активный пользователь

    Сообщения:
    126
    Симпатии:
    33
    Меня ничего не надо.
     
  16. L0ky

    L0ky Пользователь

    Сообщения:
    31
    Симпатии:
    0
  17. grey0207

    grey0207 Активный пользователь

    Сообщения:
    126
    Симпатии:
    33
    Можно и так :)