При управлінні сайту на OpenCart важливо розуміти, як часто переглядаються товари. Стандартна функція лічильника переглядів у OpenCart 3 підраховує кожне звернення до сторінки товару, але не розрізняє унікальні перегляди від повторних. Це означає, що якщо один користувач завантажить сторінку товару 10 разів, лічильник збільшиться на 10, хоча фактично цей товар переглянула лише одна людина.

У цій статті розглянемо, як реалізувати систему відстеження унікальних переглядів товарів по IP-адресі. Це дозволить отримати більш точну статистику популярності товарів і краще розуміти поведінку реальних покупців на вашому сайті.

Модифікатор, який ми використаємо, буде:

  • Записувати IP-адресу кожного, хто переглядає товар
  • Фільтрувати ботів (Google, Yandex, Ahrefs та інші), щоб не спотворювати статистику
  • Рахувати унікальні перегляди — збільшувати лічильник лише при першому перегляді з нової IP
  • Зберігати дату та User Agent для детальної аналітики

Крок 1: Створення нової таблиці в базі даних

Спочатку потрібно створити таблицю для зберігання інформації про переглядів товарів по IP-адресам. Цей крок виконується один раз через phpMyAdmin.

Інструкція через phpMyAdmin

  1. Перейдіть на хостинг вайшого сайту безпосередньо в phpMyAdmin
  2. Виберіть вашу базу даних
  3. Перейдіть на вкладку SQL
  4. Вставте наступний код:
1
2
3
4
5
6
7
8
9
10
CREATE TABLE IF NOT EXISTS `oc_product_view` (
  `product_view_id` INT(11) NOT NULL AUTO_INCREMENT,
  `product_id` INT(11) NOT NULL,
  `ip` VARCHAR(40) NOT NULL,
  `user_agent` VARCHAR(255) NOT NULL,
  `date_viewed` datetime NOT NULL,
  PRIMARY KEY (`product_view_id`),
  INDEX (`product_id`),
  INDEX (`ip`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  1. Натисніть кнопку Виконати (Execute)

Таблиця успішно створена! Тепер у вас є таблиця oc_product_view, в яку будуть записуватись дані про перегляди товарів.

Що роблять поля таблиці:

  • product_view_id — унікальний ідентифікатор запису
  • product_id — ID товару, який переглядали
  • ip — IP-адреса відвідувача
  • user_agent — інформація про браузер та ОС відвідувача
  • date_viewed — дата та час перегляду
  • Індекси на product_id та ip прискорюють пошук даних

Крок 2: Встановлення модифікатора

Модифікатор змінює поведінку OpenCart так, щоб замість звичайного лічильника переглядів записувалася інформація про IP-адресу та перевірялась унікальність перегляду.

Завантаження та встановлення

  1. Завантажте файл модифікатора нижче
  2. Перейдіть в адміністративну панель OpenCart
  3. Перейдіть до Розширення → Модифікатори (Extensions → Modifications)
  4. Натисніть кнопку Завантажити (Upload)
  5. Виберіть файл product_view_by_ip.ocmod.zip
  6. Натисніть Продовжити (Continue)
  7. Найголовніше: перейдіть до Розширення → Модифікатори та натисніть на іконку обновлення модифікаторів

Модифікатор встановлено та активовано!

Завантажити файл модифікатора 💾

Код модифікатора:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?xml version="1.0" encoding="utf-8"?>
<modification>
  <name>Product View by IP</name>
  <code>product-view-by-ip</code>
  <version>1.0</version>
  <author>SetBenson</author>
  <link>https://setbenson.com</link>
   <file path="catalog/model/catalog/product.php">
    <operation>
      <search><![CDATA[$this->db->query("UPDATE " . DB_PREFIX . "product SET viewed = (viewed + 1) WHERE product_id = '" . (int)$product_id . "'");]]></search>
      <add position="replace"><![CDATA[
	  $ip = $this->db->escape($_SERVER['REMOTE_ADDR']);
	  $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
	  $user_agent_escaped = $this->db->escape($user_agent);
      $product_id = (int)$product_id;
 
	  // ---- Фільтрація ботів ----
$ua = strtolower($user_agent);
 
$bots = [
    'bot',
    'crawl',
    'spider',
    'googlebot',
    'bingbot',
    'slurp',
    'duckduckbot',
    'baiduspider',
    'yandex',
    'sogou',
    'exabot',
    'facebot',
    'ia_archiver',
    'ahrefs',
    'semrush'
];
 
foreach ($bots as $b) {
    if (strpos($ua, $b) !== false) {
        return; // НЕ записуємо бота
    }
}
 
    // Перевіряємо, чи був перегляд цього товару з такого IP
    $query = $this->db->query("
        SELECT product_view_id 
        FROM " . DB_PREFIX . "product_view 
        WHERE product_id = '$product_id' 
        AND ip = '$ip'
        LIMIT 1
    ");
 
    if (!$query->num_rows) {
 
        // Додаємо запис про перегляд
        $this->db->query("
            INSERT INTO " . DB_PREFIX . "product_view 
            SET product_id = '$product_id',
                ip = '$ip',
				user_agent = '" . $user_agent . "',
                date_viewed = NOW()
        ");
 
        // Збільшуємо лічильник в таблиці product
        $this->db->query("
            UPDATE " . DB_PREFIX . "product 
            SET viewed = viewed + 1 
            WHERE product_id = '$product_id'
        ");
    }
		]]></add>
    </operation>
  </file>
</modification>

Як це працює

Логіка модифікатора:

  1. Отримання IP-адреси — беремо $_SERVER['REMOTE_ADDR']
  2. Фільтрація ботів — перевіряємо User Agent на наявність слів, притаманних поисковикам та краулерам. Якщо це бот — виходимо, не записуючи нічого
  3. Перевірка унікальності — шукаємо в таблиці запис про перегляд цього товару з цієї IP
  4. Запис даних — якщо це новий перегляд, вставляємо запис в таблицю oc_product_view з IP, User Agent та поточною датою
  5. Збільшення лічильника — одночасно з записом збільшуємо поле viewed в таблиці product на 1

Таким чином, лічильник переглядів тепер показує кількість унікальних IP-адрес, які переглядали товар, а не загальну кількість переглядань сторінки.


Перевірка роботи

Після встановлення модифікатора:

  1. Очистіть кеш в адміністративній панелі
  2. Відкрийте сторінку товару на фронтенді (в інкогніто режимі браузера)
  3. Перейдіть в phpMyAdmin
  4. Виберіть таблицю oc_product_view
  5. Ви повинні бачити записи про переглядів з вашою IP-адресою

Спробуйте перезавантажити сторінку товару — нова строка не додасться, оскільки ви переглядаєте з однієї IP. Це правильне поведінка модифікатора.


Додаткова функціональність

Модифікатор також можна розширити, щоб:

  • Виключати внутрішні IP-адреси (127.0.0.1, вашої мережі)
  • Використовувати дійсну IP замість REMOTE_ADDR (корисно якщо сайт за CDN або проксі)
  • Гіблювати окремо по юзерам — якщо в OpenCart є система реєстрації, записувати customer_id замість IP
  • Враховувати час перегляду товару юзера, через який можливо повторне зарахування перегляду одного і того ж товару (наприклад, 24 години)

Розповісти більше про кастомізацію цього модифікатора — пишіть коментарі під статтею!


Висновки

Система відстеження унікальних переглядів по IP дозволяє:
✓ Отримати реальну статистику популярності товарів
✓ Відфільтрувати неправдиві дані від ботів
✓ Зберегти детальну інформацію про відвідувачів
✓ Зробити більш влучні висновки про попит на продукцію магазину

Цей простий, але потужний модифікатор допоможе вам краще розуміти, які товари насправді цікавлять ваших покупців.