# OpenCart 2

Этот документ содержит инструкции по установке модуля REES46 OpenCart (далее модуль REES46) и его интегрирование с вашим интернет-магазином на основе OpenCart.

Важно!

Обратите внимание, что если какой-либо функционал (например, отображение блоков рекомендаций) не работает даже в случае соблюдения всех инструкций документации, то скорее всего возникает конфликт с другими модулями, либо вы используете модифицированную версию OpenCart 2. Пожалуйста, свяжитесь с нами по адресу desk@rees46.ru, и мы поможем вам разобраться с возникшей проблемой.

Информация

Этот документ применим для следующих версий OpenCart: v 2.0.1.0 - 2.3.x.x, а также для модуля Simple Checkout.

# Подключение модуля

В этом разделе объясняется, как установить, настроить и подключить модуль REES46 к вашему интернет-магазину под управлением OpenCart.

# Регистрация вашего магазина на REES46

До установки и подключения этого модуля, необходимо зарегистрировать ваш магазин на нашем сайте rees46.ru.

Чтобы зарегистрировать магазин:

  1. Зарегистрируйтесь на сайте REES46:
    • Откройте эту страницу
    • Создайте свой Личный Кабинет.
    • Создайте проект для вашего магазина.
  2. Запишите Store Key (код магазина) и Secret Key (секретный ключ).

Примечание

Store Key и Secret Key - уникальные идентификаторы, например: 640e3aq6dd5e70c8156e75238bf4e2. Они используются для доступа к нашим ресурсам через программный интерфейс REES46.

Вы всегда можете найти Store Key и Secret Key в вашем личном кабинете rees46.ru.

# Установка модуля

# Установка специального патча

Перед установкой модуля, установите патч, следуя данным инструкциям:

  1. Скачайте на локальный компьютер специальный патч Quick Fix. Для этого откройте данную страницу (opens new window) и выполните следующие шаги:
    • Нажмите на DOWNLOAD.
    • Введите логин и пароль для вашей учетной записи OpenCart.
    • На странице загрузки модуля нажмите DOWNLOAD, чтобы загрузить Zip-архив с патчем.
    • Распакуйте архив.
  2. В меню Административной панели откройте Дополнения > Установщик дополнений, и нажмите Загрузить для отправки на сервер файла localcopy.ocmod.xml, который получен после распаковки патча.
  3. В Административной панели откройте Дополнения > Менеджер дополнений и нажмите Очистить (или Сброс). Примечание: Дождитесь завершения процесса очистки кешированных файлов.
  4. В Административной панели откройте Дополнения > Менеджер дополнений и нажмите Обновить, чтобы обновить кэш.

# Установка модуля

Скачайте на локальный компьютер Zip-архив со страницы модуля (opens new window). На данной странице выполните следующие шаги:

  • Нажмите на DOWNLOAD.
  • Введите логин и пароль для вашей учетной записи OpenCart.
  • Выберите Zip-архив для вашей версии OpenCart. В меню Административной панели OpenCart вашего магазина, откройте Дополнения > Установщик дополнений. Загрузите на сервер полученный архив rees46.ocmod.zip, нажав на кнопку Загрузить. В Административной панели откройте Дополнения > Менеджер дополнений и нажмите Очистить (или Сброс). Примечание: Дождитесь завершения процесса очистки кешированных файлов. В Административной панели откройте Дополнения > Менеджер дополнений и нажмите Обновить, чтобы обновить кэш. В Административной панели откройте Дополнения > Модули и установите модуль REES46.

# Настройка модуля REES46

Чтобы выполнить настройки модуля REES46

  1. В Административной панели откройте Дополнения > Модули > REES46, а затем перейдите на вкладку Общее.
  2. В полях Store Key и Secret Key введите значения идентификатора вашего магазина и секретного ключа. ПРИМЕЧАНИЕ: Вы всегда можете посмотреть эти значения в вашем Личном кабинете на rees46.ru.
  3. Установите значение в поле Статус модуля на Включено.
  4. Для сохранения изменений настроек модуля, нажмите на иконку .

Пример вкладки Общее:

Настройка модуля

# Экспорт данных в REES46

Этот раздел объясняет, как экспортировать существующие данные из вашего магазина в модуль REES46.

# Экспорт товарного каталога

В этой секции приведены инструкции по экспорту вашего товарного каталога.

  1. В меню Административной панели OpenCart откройте Дополнения > Модули > REES46, а затем откройте вкладку Товары.
  2. Из выпадающего списка Валюта выберите необходимую валюту.
  3. Сохраните текущие изменения, нажав на иконку 💾.
  4. Для фонового создания XML с помощью Cron используйте ссылку в поле Ссылка для крона. В этом случае, при запросе файла будет сразу загружаться сгенерированный кроном XML файл.

Пример вкладки Товары:

Экспорт товарного каталога

# Экспорт истории заказов

В этой секции приведены инструкции по экспорту Истории заказов.

  1. В меню Административной панели OpenCart откройте Дополнения > Модули > REES46, а затем откройте вкладку Заказы.
  2. На вкладке Заказы выберите соответствующие флажки, чтобы установить соответствия между статусами ваших заказов и статусами заказов в модуле REES46.
  3. Нажмите на 💾, чтобы сохранить текущие настройки модуля, а затем снова откройте вкладку Заказы.
  4. Нажмите на кнопку Начать экспорт.

Пример вкладки Заказы:

Экспорт истории заказов

# Экспорт списка покупателей и подписчиков

В этой секции приведены инструкции по экспорту списка ваших покупателей и подписчиков.

  1. В меню Административной панели OpenCart откройте Дополнения > Модули > REES46, а затем откройте вкладку Покупатели.
  2. Из выпадающего списка Тип покупателей выберите тип покупателей, список которых вы хотите экспортировать.
  3. Нажмите на 💾, чтобы сохранить текущие настройки модуля, а затем снова откройте вкладку Покупатели.
  4. Нажмите на кнопку Начать экспорт.

Экспорт аудитории

# Загрузка файлов для Web Push оповещений

Важно

Чтобы использовать Web Push оповещения, ваш сайт должен поддерживать HTTPS протокол.

Важно

Не пытайтесь тестировать web-push уведомления в режиме "Инкогнито" в любом из браузеров! Веб-пуш уведомления не работают в этом режиме.

Чтобы загрузить файлы на сервер

  1. В меню Административной панели OpenCart откройте Дополнения > Модули > REES46, а затем откройте вкладку Веб-пуш.
  2. Нажмите на кнопку Проверить файлы.

Примечание

После нажатия на данную кнопку, система проверяет наличие необходимых файлов в корневой директории вашего вэб-сайта и при необходимости загружает их. По завершению загрузки файлов на сервер и их проверки, Административная панель выдает соответствующее сообщение.

Пример вкладки Веб-пуш:

Web push

# Товарные рекомендации

Подробная инструкция по созданию и управлению блоками товарных рекомендаций находится в Товарные рекомендации.

Здесь рассмотрим, как вставлять уже готовые блоки на страницы сайта.

Чтобы добавить к модулю REES46 новый блок рекомендаций:

  1. В меню Административной панели OpenCart откройте Дополнения > Модули > REES46, а затем откройте вкладку Рекомендации.
  2. Чтобы добавить новый блок рекомендаций, нажмите на кнопку Добавить.
  3. Выполните настройки вновь добавленного блока. Примечание: Для каждого блока рекомендаций необходимо создавать новые настройки.
  4. Нажмите на иконку 💾, чтобы сохранить текущие настройки модуля.

Пример вкладки Рекомендации:

Товарные рекомендации

Пример страницы настроек добавляемого блока рекомендаций:

Товарные рекомендации

# Размещение блоков рекомендаций

В этой секции объясняется, как разместить блоки товарных рекомендаций на страницах вашего сайта.

Чтобы задать размещение блоков рекомендаций:

  1. В меню Административной панели OpenCart откройте Дизайн > Схемы
  2. Чтобы добавить блок на нужную схему (смотрите таблицу размещения ниже), необходимо выполнить соответствующие настройки схемы (смотрите скриншоты в секции Как настроить параметры схемы далее на этой странице).

Для размещения вновь созданных блоков товарных рекомендаций используйте схему, описанную в Рекомендованная схема расположения блоков на сайте.

Добавление блока на нужную схему происходит при выполнении настроек параметров соответствующей схемы с помощью интерфейса Административной панели OpenCart.

Для пояснений по необходимым действиям, рассмотрите скриншоты, приведенные далее.

  1. Как добавить и начать редактирование схемы:

Товарные рекомендации

  1. Редактирование настроек схемы:

Товарные рекомендации

Примечание

Подробнее о функции Дизайн и Схемы, предоставляемой Административной панелью OpenCart, смотрите документацию OpenCart: “Глава 6: Design” в документе Definitive Guide to Getting Started with OpenCart 2.x, который доступен на сайте OpenCart (opens new window).

# Проверка работоспособности

# Как выполнить проверку

  1. Включите консоль разработчика в вашем браузере.
  2. Выберите вкладку Network (или "Сеть"), в которой при обновлении страницы отображаются происходящие запросы.
  3. Включаете режим фильтрации только XHR-запросов.
  4. Проверяете, есть ли запросы, которые уходят на api.rees46.ru.

# Проверка отправки событий

  1. Откройте страницу карточки товара и убедитесь, что уходит PUSH-событие к API REES46.
  2. Добавьте товар в корзину и убедитесь, что уходит PUSH-событие к API REES46.
  3. Удалите товар из корзины и убедитесь, что уходит PUSH-событие к API REES46.
  4. Сделайте заказ товара и убедитесь, что уходит PUSH-событие к API REES46.

Проверка событий

# Проверка запроса рекомендаций

  1. Откройте страницу сайта, где установлены блоки и убедитесь, что к API REES46 уходит столько запросов, сколько установлено блоков рекомендаций.
  2. Осуществите поиск товара и убедитесь, что к API REES46 ушёл запрос на рекомендации при установленном блоке "Искавшие это также купили".

Проверка событий

# Удаление старой версии модуля OpenCart 2.1/2.2

Обратите внимание!

Используйте данную инструкцию только в том случае, если недоступна штатная функция удаления модуля REES46 средствами OpenCart. В противном случае это может привести нарушению работы интернет-магазина.

# Удаление библиотеки REES46

Найдите и удалите следующий файл:

/catalog/controller/common/rees46_recommend.php

# Удаление кода блоков рекомендаций в шаблонах

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

Шаблон Код
template/common/home.tpl
template/common/home.tpl
template/common/home.tpl
template/product/category.tpl
template/product/category.tpl
template/product/category.tpl
template/product/product.tpl
template/product/product.tpl
template/product/product.tpl
template/product/product.tpl
template/checkout/cart.tpl
template/checkout/cart.tpl
template/product/search.tpl

# Удаление кода инициализации

Отредактируйте файл шаблона подвала сайта /catalog/view/theme/<НАЗВАНИЕ_ВАШЕЙ_ТЕМЫ>/template/common/footer.tpl, где перед закрывающим тегом </body> должен находиться следующий код, который необходимо удалить:

<!-- Insert before </body> -->
<!-- REES46 Init Begin -->
<script src="//cdn.rees46.ru/rees46_script2.js"></script>
<script type="text/javascript">
    var REES46Info = {
        shopId: 'КОД_ВАШЕГО_МАГАЗИНА_В_REES46',
        currentUserId:<?php echo empty($currentUserId) ? 'null' : $currentUserId; ?>,
        currentUserEmail:<?php echo empty($currentUserEmail) ? 'null' : '\''.$currentUserEmail.'\''; ?>
    };
    String.prototype.format||(String.prototype.format=function(){
        var e=arguments;return this.replace(/\[(\d+)\]/g,function(t,r){return"undefined"!=typeof e[r]?e[r]:t});
    });
    var REES46CurrentCart=<?php $cart_ids=array();foreach($products as $product){array_push($cart_ids,$product['product_id']);};echo "[".implode(',', $cart_ids)."]"; ?>;
  REES46.init(REES46Info.shopId, { id: REES46Info.currentUserId, email: REES46Info.currentUserEmail }, function() {
    REES46.addStyleToPage();
    if (typeof(REES46CurrentProductInfo) != 'undefined') {
      REES46.addReadyListener(function(){
        REES46.pushData('view', REES46CurrentProductInfo);
      });
    }
    $('.rees46-recommend').each(function() {
      var recommender = $(this),
              recommenderType = recommender.attr('data-type'),
              limit = recommender.attr('data-limit'),
              title = recommender.attr('data-title'),
              search_query = recommender.attr('data-search');
      var currentItem = null;
      if (typeof(REES46CurrentProductInfo) != 'undefined') {
        currentItem = REES46CurrentProductInfo.item_id;
      }
      var currentCart = [];
      if (typeof(REES46CurrentCart) != 'undefined') {
        currentCart = REES46CurrentCart;
      }
      var currentCategory = null;
      if (typeof(REES46CurrentCategory) != 'undefined') {
        currentCategory = REES46CurrentCategory;
      }
      REES46.recommend({
        recommender_type: recommenderType,
        limit: limit,
        item: currentItem,
        category: currentCategory,
        cart: currentCart,
        search_query: search_query
      }, function(items) {
        if (items.length == 0) {
          return;
        }
        $.get('/index.php?route=common/rees46_recommend&type=' + recommenderType + '&ids=' + items.join(','), function(response) {
          var tplItems = '<div class="recommender-block-title">[1]</div><div class="recommended-items">[0]</div>';
          var tplItem  = '<div class="recommended-item">'+
                  '<div class="recommended-item-photo">'+
                  '<a href="[0]"><img src="[2]" class="item_img" /></a>'+
                  '</div>'+
                  '<div class="recommended-item-title">'+
                  '<a href="[0]">[1]</a>'+
                  '</div>'+
                  '<div class="recommended-item-price">'+
                  '[3]'+
                  '</div>'+
                  '<div class="recommended-item-action">'+
                  '<a href="[0]">Подробнее</a>'+
                  '</div>'+
                  '</div>';
          var productsBlock = '';
          response = JSON.parse(response);
          $(response).each(function() {
            if (this.name != '') {
              var linkToItem = this.url;
              if (linkToItem.indexOf('?') >= 0) {
                linkToItem = linkToItem + '&';
              } else {
                if (linkToItem.indexOf('.htm') >= 0) {
                  linkToItem = linkToItem + '#?';
                } else {
                  linkToItem = linkToItem + '?';
                }
              }
              linkToItem = linkToItem + 'recommended_by=' + recommenderType;
              productsBlock += tplItem.format(
                      linkToItem,
                      this.name,
                      this.image_url,
                      this.price
              );
            }
          });
          var recommender_titles = {
            interesting: 'Вам это будет интересно',
            also_bought: 'С этим также покупают',
            similar: 'Похожие товары',
            popular: 'Популярные товары',
            see_also: 'Посмотрите также',
            recently_viewed: 'Вы недавно смотрели',
            search: 'Искавшие это также купили'
          };
          if (productsBlock != '') {
            items = tplItems.format(productsBlock, (title || recommender_titles[recommenderType]));
            if (REES46.showPromotion) {
              items = items + REES46.getPromotionBlock();
            }
            recommender.html(items);
          }
        });
      });
    });
    rees_event_remove_from_cart ();
  });
  $(function() {
    $(document).ajaxSend(function(event, jqxhr, settings) {
      if (/index.php\?route\=checkout\/cart\/add/.test(settings.url)) {
        settings.data.split('&').forEach(function(pair) {
          var parts = pair.split('=');
          if (parts[0] == 'product_id') {
            REES46.addReadyListener(function(){
              REES46.pushData('cart', { item_id: parts[1] });
              $(document).bind("ajaxComplete", function(){
                  rees_event_remove_from_cart ();
              });
            });
          }
        });
      }
      if (/index.php\?route\=checkout\/cart\/remove/.test(settings.url)) {
          $(document).bind("ajaxComplete", function(){
              rees_event_remove_from_cart ();
          });
      }
    });
  });
  function rees_event_remove_from_cart () {
    $.each($('button'),function(index,value) {
        var remove_button=$(value).attr('onclick');
        if (typeof(remove_button) != 'undefined' && remove_button.indexOf('cart.remove')+1) {
            $(this).off("click");
            $(this).on("click",function(){
                var item = $(this).parents('tr td').siblings('td');
                var item_id = '';
                $.each(item, function (n,m){
                    var item_link = $(m).children('a').attr('href');
                    if (typeof(item_link) != 'undefined' && item_link.indexOf('product_id=')+1) {
                        item_id = item_link.split('product_id=')[1];
                        REES46.addReadyListener(function(){
                            REES46.pushData('remove_from_cart', {
                                item_id:item_id
                            });
                        });
                        return (item_id === '');
                    };
                });
            });
        };
    });
  };
</script>
<!-- REES46 Init End -->

Затем отредактируйте файл /catalog/controller/common/footer.php. Найдите и удалите следующий код. Он должен располагаться после строки $this->load->language('common/footer');:

// REES46 User & Product tracking begin
$data['currentUserId'] = $this->customer->getId();
$data['currentUserEmail'] = $this->customer->getEmail();
$data['products'] = $this->cart->getProducts();
// REES46 User & Product tracking end

# Удаление кода отслеживания событий

Отредактируйте файл /catalog/controller/product/product.php. Найдите и удалите следующий код. Он должен располагаться перед строкой if ($product_info['quantity'] <= 0).

// REES46 category & stock tracking begin
$data['productCategories'] = $this->model_catalog_product->getCategories((int)$this->request->get['product_id']);
$data['productHref'] = $this->url->link('product/product', 'product_id=' . (int)$this->request->get['product_id']);
$data['rees46_is_available'] = $product_info['quantity'];
// REES46 category & stock tracking end

Затем отредактируйте файл шаблона карточки товара /catalog/view/theme/<НАЗВАНИЕ_ВАШЕЙ_ТЕМЫ>/template/product/product.tpl. Найдите и удалите следующий код. Он должен располагаться перед строкой <?php echo $footer; ?>:

<!-- REES46 product tracking begin -->
<script type="text/javascript">
    var REES46CurrentProductInfo = {
        item_id:      <?php echo $product_id; ?>,
        price:        <?php
            if ($special) {
                preg_match('/\d+\.?\d*/', $special, $matches);
                echo $matches[0];
            } else {
                preg_match('/\d+\.?\d*/', $price, $matches);
                echo $matches[0];
            }
        ?>,
        is_available: <?php if (isset($rees46_is_available) && $rees46_is_available>0) { echo 'true'; } else { echo 'false'; }; ?>,
        categories:   <?php
            $categories = array();
            $product_categories = $productCategories;
            foreach (array_reverse($product_categories) as $product_category) {
                array_push($categories, $product_category['category_id']);
            }
            echo ('['.implode(',', $categories).']');
        ?>,
        name:        '<?php echo trim(preg_replace('/\s+/', ' ', strip_tags(html_entity_decode($heading_title, ENT_QUOTES, 'UTF-8')))); ?>',
        url:         '<?php echo $productHref; ?>',
        image_url:   '<?php echo $popup; ?>'
    };
</script>
<!-- REES46 product tracking end -->

Затем отредактируйте файл /catalog/controller/checkout/success.php. Найдите и удалите следующий код. Он должен располагаться перед строкой $this->cart->clear();:

// REES46 purchase tracking begin
$rees46_cookie_content = array('items' => array(), 'order_id' => $this->session->data['order_id']);
$current_cart = $this->cart->getProducts();
foreach ($current_cart as $cart_item) {
    array_push($rees46_cookie_content['items'], array('item_id' => $cart_item['product_id'], 'price' => $cart_item['price'], 'amount' => $cart_item['quantity']));
}
setcookie('rees46_track_purchase', json_encode($rees46_cookie_content));
// REES46 purchase tracking end

Затем отредактируйте файл /catalog/controller/product/category.php. Найдите и удалите следующий код. Он должен располагаться перед строкой $category_info = $this->model_catalog_category->getCategory($category_id);:

// REES46 category tracking begin
$data['rees46_category_id'] = $category_id > 0 ? $category_id : '';
// REES46 category tracking end

Затем отредактируйте файл шаблона страницы категорий /catalog/view/theme/<НАЗВАНИЕ_ВАШЕЙ_ТЕМЫ>/template/product/category.tpl. Найдите и удалите следующий код. Он должен располагаться перед строкой <?php echo $footer; ?>:

<!-- REES46 category tracking begin -->
<script type="text/javascript">
  var REES46CurrentCategory = "<?php echo isset($rees46_category_id) ? $rees46_category_id : ''; ?>";
</script>
<!-- REES46 category tracking end -->

И наконец отредактируйте файл /catalog/controller/product/search.php. Найдите и удалите следующий код. Он должен располагаться перед строкой if (isset($this->request->get['tag'])) {:

// REES46 Search Query tracking begin
$data['rees46_search_query'] = $search;
// REES46 Search Query tracking end