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

drnemo

Користувачі
  
  • Публікації

    241
  • З нами

  • Відвідування

Повідомлення, опубліковані користувачем drnemo

  1. Для учета целей в я.метрике использую вызов функции ym(IDсчетчика, 'reachGoal', 'IDЦели');

    Для целей добавления в корзину и покупки добавляю вызов функции в скрипт нажатия на кнопку - все работает как надо. Теперь встал вопрос отслеживания цели в метрике "Регистрация пользователя" - куда добавить вызов, если регистрация может быть на этапе оформления заказа (стоит simple) и отдельно (тут более проще, можно хоть на загрузку страницы об успешной регистрации)?

  2. 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
  3. 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" (модули или платные или самому писать)

  4. 22 минуты назад, toyotatop сказал:

    smtp

    в логах OC есть ошибки (система/обслуживание/журнал ошибок)? Доступ к логам сервера есть? там есть что-нибудь (для apache, например, могут быть здесь /var/log/apache2/error.log)?

    Если везде пусто, то попробовать написать хостеру smtp сервера с указанием времени/темы/получателя тестового сообщения.

    Если до этого все работало, ничего не меняли на сервере и вдруг перестало, то скорей всего к хостеру, но без логов ошибок - гадание на кофейной гуще

  5. вот здесь подробно расписано как через 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>

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

  6. 21 час назад, chukcha сказал:

    сразу после index
    
    return '' - зачем вам лишний запрос на внешний сервер?

    сделал так, кэш модификаторов и темы обновил, кэш браузера почистил, но из расширений не исчезло (

    Спойлер
    
    <?php
    class ControllerExtensionExtensionPromotion extends Controller {
    	public function index() {
    		
    		return '';
    		
    		$curl = curl_init();
    
    		curl_setopt($curl, CURLOPT_URL, OPENCART_SERVER . 'index.php?route=api/promotion&type=' . substr($this->request->get['route'], strrpos($this->request->get['route'], '/') + 1));
    		curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    		curl_setopt($curl, CURLOPT_HEADER, false);
    		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    		curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
    		curl_setopt($curl, CURLOPT_TIMEOUT, 30);
    
    		$response = curl_exec($curl);
    
    		curl_close($curl);
    
    		if ($response) {
    			return $response;
    		} else {
    			return '';
    		}
    	}
    }

     

     

  7. Не получается изменить session.gc_maxlifetime, apache+php. Путь к php.ini беру из команды php -i |grep php.ini, правлю параметр и перезапускаю apache (sudo service apache2 restart), в итоге в phpinfo ничего не поменялось. 

     

    update: отбой, взял путь к php.ini из Loaded Configuration File phpinfo и все обновилось, странно что php -i |grep php.ini показывает другой путь

  8. 16 часов назад, kJlukOo сказал:

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

     добавил поддержку снижения налогов после скидки

     тестил верси 2.3 и 3. 1.5 и 2.1-2 не тестил еще

    Отлично! Обновить в 3 просто через установку расширений, старую версию удалять не надо?

×
×
  • Створити...

Important Information

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