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

Нужен ли модуль "фильтр в категории" ?


dotsent

Recommended Posts

В виду того, что оперкарт не обладает большим функционалом, как например magento, захотелось сделать фильтры подобные magento и хочется поделиться с другими пользователями.Хочется получить совет по поводу какие фильтров, и стоит ли вообще выкладывать модуль ?Пока что реализованно фильтры по производителям в конкретной категории вот пример: http://chipollino.com.ua/igrushki.html. Какие фильтры планируется сделать:По производителям - уже есть (добавить возможность выбора нескольких производителей, список чекбоксов )По под категориям - список чекбоксов По цене от: до: + слайде jquery (http://jqueryui.com/demos/slider/#range) Жду ещё Ваших предложений по фильтрам и их функциональности ?

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


Хочется получить совет по поводу какие фильтров, и стоит ли вообще выкладывать модуль ?

Разумеется стоит.Можно еще фильтрацию (множественную с чек-боксами) по состояниям на складе.
Надіслати
Поділитися на інших сайтах


  • 4 weeks later...
  • 2 weeks later...

Уважаемый dotsent!Воюю уже четвертый день с чекбоксами производителей в категории.плз, если не затруднит - решение в студию, или укажите хоть, где рыть,ибо измучался весь =)С уважением.

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

  • 3 weeks later...

В виду того, что оперкарт не обладает большим функционалом, как например magento, захотелось сделать фильтры подобные magento и хочется поделиться с другими пользователями.Хочется получить совет по поводу какие фильтров, и стоит ли вообще выкладывать модуль ?Пока что реализованно фильтры по производителям в конкретной категории вот пример: http://chipollino.com.ua/igrushki.html. Какие фильтры планируется сделать:По производителям - уже есть (добавить возможность выбора нескольких производителей, список чекбоксов )По под категориям - список чекбоксов По цене от: до: + слайде jquery (http://jqueryui.com/demos/slider/#range) Жду ещё Ваших предложений по фильтрам и их функциональности ?

Доброй ночи, а где собственно Вы уважаемый делитесь данным модулем? :roll: очень нужен фильтр, только по-производителям. Судя как Вы написали, Вы уже его сделали. Можно исходник?
Надіслати
Поділитися на інших сайтах


В данный момент был занят, там не так просто его выложить, так как там правились шаблоны сам код модуля. Могу выложить свой шаблон и контроллер, без инструкция что исправить или исправить кому надо на сайте. Сам модуль постараюсь доделать в ближайшее время.

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


В данный момент был занят, там не так просто его выложить, так как там правились шаблоны сам код модуля. Могу выложить свой шаблон и контроллер, без инструкция что исправить или исправить кому надо на сайте. Сам модуль постараюсь доделать в ближайшее время.

Было бы не плохо, посмотреть на сам измененный код (в нем есть Ваши комментарии, в плане "My modify"?)Если Вы его дорабатываете, сам магазин у себя можно оформлять полностью, а потом только добавить модуль и все будет отлично? или стоит ждать модуля, а потом уже наполнять/создавать магазин? :roll: И еще один вопрос: Сам модуль отображает всех полностью производителей или только производителей, которые есть в данной категории?Так что, если вам будет не сложно, поделитесь уже измененными файлами. :cry: Может быть и разберемся как его интегрировать с 0.
Надіслати
Поділитися на інших сайтах


> И еще один вопрос: Сам модуль отображает всех полностью производителей или только производителей, которые есть в данной категории?Только в данной категории, просто там правок у меня было много, я там добавил ещё сетку по сколько товаров выводить и так далее комментариев, к сожалению нет.Изменёнными файлами поделюсь завтра скорей всего, постараюсь добавить комментарии в код и шаблон, так как он отличается от стандартного.Пишите email в личку пришлю Вам изменения.

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


Ну в общем с этим я тоже боролся.

В итоге делаю пока примитивным дополнением таблицы product полями-критериями для конкретной задачи, а потом в модели и контроллере дописываю необходимые критерии.

Вот что получилось в двух проектах

http://svobodamusic.net/music (нажать на фильтр материала)

и http://poliit.com.ua/index.php?route=product/category

Оба c AJAX.

В дальнейшем, хочу реализовать кастомное добавление опций и значений, при чем опции могут быть разных типов: чекбокс, радио, селект, слайдер и слайдер-диапазон. Можно еще текстовое поле с keyup, но есть поиск. Хотя если реализовать так фильтр, то нужда в поиске исчезнет.

Теперь вот думаю, что же выбрать, добавление полей ALTER'ом, что уж совсем низко, или же value_to_product.

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

Конечно. Здесь напишу пошагово, если администрация не против.

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

Ну в общем с этим я тоже боролся.

В итоге делаю пока примитивным дополнением таблицы product полями-критериями для конкретной задачи, а потом в модели и контроллере дописываю необходимые критерии.

Вот что получилось в двух проектах

http://svobodamusic.net/music (нажать на фильтр материала)

и http://poliit.com.ua/index.php?route=product/category

Оба c AJAX.

В дальнейшем, хочу реализовать кастомное добавление опций и значений, при чем опции могут быть разных типов: чекбокс, радио, селект, слайдер и слайдер-диапазон. Можно еще текстовое поле с keyup, но есть поиск. Хотя если реализовать так фильтр, то нужда в поиске исчезнет.

Теперь вот думаю, что же выбрать, добавление полей ALTER'ом, что уж совсем низко, или же value_to_product.

Очень не плохо. В первом проекте понравилось. эх.... когда - же кто-то допишет сие чудо полностью и выложит... Доцент не связался так и (
Надіслати
Поділитися на інших сайтах


Та уже вот дописываю. 95% общий прогресс, осталось красоту навести и подправить js для моментального отображения добавленной опции.Ну, а так же собрать все файлы в кучу и написать порядок установки.Ждите, сегодня-завтра выложу.

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

Та уже вот дописываю. 95% общий прогресс, осталось красоту навести и подправить js для моментального отображения добавленной опции.Ну, а так же собрать все файлы в кучу и написать порядок установки.Ждите, сегодня-завтра выложу.

Очень жду, спасибо! Этого модуля очень не хватает..
Надіслати
Поділитися на інших сайтах


Тут же я. Извиняюсь за опоздание, но я решил сделать полноценный модуль и не с фиксированными опциями, как у меня в примерах, а изменяемыми / дополняемыми из админки. При чем в базу данных для этого лезть не надо. Всё автоматизированно. И еще, сюда же включил AJAX листалку в категории и AJAX сортировку. Всё это активируется после первого изменения параметров фильтра со стороны пользователя за время нахождения в категории.

Опишу ф-ции модуля Opencart Product Filter 1.0 :-) :

добавление опций фильтра и значений к ним

указание сортировки опций

указание одной или нескольких категорий, в которых будет действовать данная опция

поддержка мультиязычности

указание опций фильтра на странице редактирования товара. В зависимости от выбранных категорий, во вкладку Опции фильтра будут подгружаться на лету опции этой категории.

AJAX подгрузка товаров категории при изменении состояния фильтра.

Индикатор активности фильтра (громко сказано, просто jQuery анимация при любых действиях с input'ами фильтра).

Если что, пишите в асю, сюда редко захожу.

Буду рад выслушать замечания или предложения.

В следующей версии хочу сделать еще несколько типов полей фильтра: слайдер, слайдер-диапазон, текстовое поле.

Перейдем к установке:

Если у вас чистая система и вы еще ничего в её коде не изменяли, то качайте архив Openstore_module_product_filter_1.0_(clean_install).rar и просто извлеките файлы в корень с заменой и выполните запрос в базу данных

CREATE TABLE IF NOT EXISTS `category_option` (  `option_id` int(10) NOT NULL AUTO_INCREMENT,  `type` int(1) DEFAULT '0',  `sort_order` int(10) DEFAULT '0',  PRIMARY KEY (`option_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_description` (  `option_id` int(10) NOT NULL DEFAULT '0',  `language_id` int(10) NOT NULL DEFAULT '0',  `name` varchar(127) DEFAULT NULL,  PRIMARY KEY (`option_id`,`language_id`),  KEY `name` (`name`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_to_category` (  `option_id` int(11) NOT NULL,  `category_id` int(11) NOT NULL,  PRIMARY KEY (`category_id`,`option_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_value` (  `value_id` int(10) NOT NULL AUTO_INCREMENT,  `option_id` int(10) DEFAULT '0',  PRIMARY KEY (`value_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_value_description` (  `value_id` int(10) NOT NULL DEFAULT '0',  `language_id` int(10) NOT NULL DEFAULT '0',  `option_id` int(10) NOT NULL DEFAULT '0',  `name` varchar(127) DEFAULT NULL,  PRIMARY KEY (`value_id`,`language_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `product_to_value` (  `product_id` int(11) NOT NULL,  `value_id` int(11) NOT NULL DEFAULT '0',  PRIMARY KEY (`product_id`,`value_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Если нет, то установка "вручную", или на систему, которая уже подвергалась изменениям в коде:

1) Делаем запрос в базу данных

CREATE TABLE IF NOT EXISTS `category_option` (  `option_id` int(10) NOT NULL AUTO_INCREMENT,  `type` int(1) DEFAULT '0',  `sort_order` int(10) DEFAULT '0',  PRIMARY KEY (`option_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_description` (  `option_id` int(10) NOT NULL DEFAULT '0',  `language_id` int(10) NOT NULL DEFAULT '0',  `name` varchar(127) DEFAULT NULL,  PRIMARY KEY (`option_id`,`language_id`),  KEY `name` (`name`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_to_category` (  `option_id` int(11) NOT NULL,  `category_id` int(11) NOT NULL,  PRIMARY KEY (`category_id`,`option_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_value` (  `value_id` int(10) NOT NULL AUTO_INCREMENT,  `option_id` int(10) DEFAULT '0',  PRIMARY KEY (`value_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_value_description` (  `value_id` int(10) NOT NULL DEFAULT '0',  `language_id` int(10) NOT NULL DEFAULT '0',  `option_id` int(10) NOT NULL DEFAULT '0',  `name` varchar(127) DEFAULT NULL,  PRIMARY KEY (`value_id`,`language_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `product_to_value` (  `product_id` int(11) NOT NULL,  `value_id` int(11) NOT NULL DEFAULT '0',  PRIMARY KEY (`product_id`,`value_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;
2) В файле adminviewtemplatecatalogproduct_form.tpl

После

<a tab="#tab_links"><?php echo $tab_links; ?></a>
Вставляем

<a tab="#tab_filter">Опции фильтра</a>
После блока

<div id="tab_general"></div>
Вставляем

<!-- Start tab filter-->      <div id="tab_filter">        Сначала необходимо выбрать категории товара      </div>      <!-- End tab filter-->
Теперь идем в конец файла, ДО

<?php echo $footer; ?>
Вставляем

<script type="text/javascript"><!--$.tabs('#tabs a'); $.tabs('#languages a'); //--></script><script type="text/javascript"><!--$('input[name=product_category[]]').live('change', function() {	getOptions();});<?php if (isset($this->request->get['product_id'])) { ?>  <?php $if_product_id = '&product_id=' . $this->request->get['product_id']; ?>  getOptions();<?php } else { ?>  <?php $if_product_id = ''; ?><?php } ?>function getOptions() {  var loadUrl = '';  var fields = $("input[name=product_category[]]").serializeArray();  jQuery.each(fields, function(i, field){     if (i == 0) {      loadUrl += field.value;     } else {      loadUrl += '_' + field.value;     }   });    $('#tab_filter').load('index.php?route=catalog/product/filter&token=<?php echo $token; ?><?php echo $if_product_id; ?>&path=' + loadUrl); }//--></script>
Сохраняем и закрываем.

3) Открываем файл adminmodelcatalogproduct.php

После блока (метод addProduct)

if (isset($data['product_store'])) {			foreach ($data['product_store'] as $store_id) {				$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_store SET product_id = '" . (int)$product_id . "', store_id = '" . (int)$store_id . "'");			}		}
Вставляем

// Start Filter    if (isset($data['product_to_value_id'])) {			foreach ($data['product_to_value_id'] as $value_id) {				$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_value SET product_id = '" . (int)$product_id . "', value_id = '" . (int)$value_id . "'");			}		}    // End filter
После блока (метод updateProduct)

$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_store WHERE product_id = '" . (int)$product_id . "'");		if (isset($data['product_store'])) {			foreach ($data['product_store'] as $store_id) {				$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_store SET product_id = '" . (int)$product_id . "', store_id = '" . (int)$store_id . "'");			}		}
Вставляем

// Start filter		$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_value WHERE product_id = '" . (int)$product_id . "'");				if (isset($data['product_to_value_id'])) {			foreach ($data['product_to_value_id'] as $value_id) {				$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_value SET product_id = '" . (int)$product_id . "', value_id = '" . (int)$value_id . "'");			}		}		// End filter
После (метод copyProduct)

$data = array_merge($data, array('product_store' => $this->getProductStores($product_id)));
Вставляем

// Start filter			$data = array_merge($data, array('product_to_value_id' => $this->getProductValues($product_id)));			// End filter
После (метод deleteProduct)

$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_store WHERE product_id = '" . (int)$product_id . "'");
Вставляем

// Start filter		$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_value WHERE product_id = '" . (int)$product_id . "'");		// End filter
Идем в конец файла, до закрытия класса вставляем

// Start filter	public function getProductValues($product_id) {    $values_id = array();       $query = $this->db->query("SELECT " . DB_PREFIX . "p2v.value_id AS value_id FROM " . DB_PREFIX . "product_to_value p2v WHERE p2v.product_id = '" . (int)$product_id . "'");        foreach ($query->rows as $result) {    	$values_id[] = $result['value_id'];    }        return $values_id;    }  // End filter
Сохраняем и закрываем

4) Открываем admincontrollercatalogproduct.php

и идем в конец файла, до закрытия класса вставляем

// Start filter   public function filter() {          $this->load->model('catalog/filter');          $this->load->model('catalog/product');        $this->data['category_options'] = array();        if (isset($this->request->get['path']) && $this->request->get['path'] != '') {             $parts = explode('_', $this->request->get['path']);            $results = $this->model_catalog_filter->getOptionByCategoriesId($parts);             if ($results) {               foreach($results as $option) {              $this->data['category_options'][] = array(                'option_id' => $option['option_id'],                'name' => $option['name'],                'type' => $option['type'],                'category_option_values' => $this->model_catalog_filter->getOptionValues($option['option_id'])              );            }          } else {            $this->data['message'] = 'Этой категории товаров не присвоен ниодин фильтр';          }          } else {          $this->data['message'] = 'Сначала выберите категорию товаров';        }                  if (isset($this->request->get['product_id'])) {             $product_id = $this->request->get['product_id'];          } else {             $product_id = 0;          }                       $product_info = $this->model_catalog_product->getProductValues($product_id);                    if (isset($this->request->post['product_to_value_id'])) {             $this->data['product_to_value_id'] = $this->request->post['product_to_value_id'];          } elseif (isset($product_info)) {             $this->data['product_to_value_id'] = $this->model_catalog_product->getProductValues($product_id);          } else {             $this->data['product_to_value_id'] = array();          }                  $this->data['language_id'] = $this->config->get('config_language_id');                 $this->template = 'catalog/get_ajax_options.tpl';                 $this->response->setOutput($this->render(TRUE), $this->config->get('config_compression'));       }       // End filter
Сохраняем и закрываем.

5) Открываем catalogmodelcatalogproduct.php

Заменяем

public function getProductsByCategoryId($category_id, $sort = 'p.sort_order', $order = 'ASC', $start = 0, $limit = 20) {
На

public function getProductsByCategoryId($category_id, $values, $sort = 'p.sort_order', $order = 'ASC', $start = 0, $limit = 20) {
До блока

$sort_data = array(			'pd.name',			'p.sort_order',			'special',			'rating',			'p.price',			'p.model'		);
Вставляем

// Start filter          if (isset($values) && $values != '') {            $data = array();                   foreach (explode('_', $values) as $value_id) {              $data[] = "value_id = '" . (int)$value_id . "'";            }                        $sql .= " AND p.product_id IN (SELECT " . DB_PREFIX . "product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")";        }        // End filter
Заменяем весь метод public function getTotalProductsByCategoryId

На

public function getTotalProductsByCategoryId($category_id = 0, $values) {		$sql = "SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product_to_category p2c LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND p2c.category_id = '" . (int)$category_id . "'";        // Start filter    if (isset($values) && $values != '') {  		$data = array();            foreach (explode('_', $values) as $value_id) {  		  $data[] = "value_id = '" . (int)$value_id . "'";  		}  		  		$sql .= " AND p.product_id IN (SELECT product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")";    }    // End filter        $query = $this->db->query($sql);    		return $query->row['total'];	}
В этом же методе, до
$query = $this->db->query($sql);
Вставляем
// Start filter    if (isset($values) && $values != '') {  		$data = array();            foreach (explode('_', $values) as $value_id) {  		  $data[] = "value_id = '" . (int)$value_id . "'";  		}  		  		$sql .= " AND p.product_id IN (SELECT product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")";    }    // End filter
Сохраняем, закрываем.

6) Открываем catalogcontrollerproductcategory.php

Заменяем

$product_total = $this->model_catalog_product->getTotalProductsByCategoryId($category_id);
На

$product_total = $this->model_catalog_product->getTotalProductsByCategoryId($category_id, $values = NULL);
Заменяем

$results = $this->model_catalog_product->getProductsByCategoryId($category_id, $sort, $order, ($page - 1) * $this->config->get('config_catalog_limit'), $this->config->get('config_catalog_limit'));
На

$results = $this->model_catalog_product->getProductsByCategoryId($category_id, $values = NULL, $sort, $order, ($page - 1) * $this->config->get('config_catalog_limit'), $this->config->get('config_catalog_limit'));
7) Качаем архив Openstore_module_product_filter_1.0_(manual_install).rar и извлекаем в корень сайта с заменой.

8) Идем в админку -> дополнения и включаем фильтр. Дальше думаю всё ясно.

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

Странно, не добавляются опции в админке. пишет "опция сохранена" обновляю страничку, а список еще пуст....думаю, что то с наименованием таблиц... у меня префикс oc_ в базе... может из-за того....

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


Сделал чистую установку без префиксов в бд. Опции стали добавляться, однако при заходе в категорию выдает вот такой код

Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in Z:homelocalhostwww24catalogcontrollerproductcategory.php on line 101 and defined in Z:homelocalhostwww24catalogmodelcatalogproduct.php on line 64
Надіслати
Поділитися на інших сайтах


Конечно! Забыл о префиксах, тогда запрос будет вида

CREATE TABLE IF NOT EXISTS `oc_category_option` (  `option_id` int(10) NOT NULL AUTO_INCREMENT,  `type` int(1) DEFAULT '0',  `sort_order` int(10) DEFAULT '0',  PRIMARY KEY (`option_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `oc_category_option_description` (  `option_id` int(10) NOT NULL DEFAULT '0',  `language_id` int(10) NOT NULL DEFAULT '0',  `name` varchar(127) DEFAULT NULL,  PRIMARY KEY (`option_id`,`language_id`),  KEY `name` (`name`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `oc_category_option_to_category` (  `option_id` int(11) NOT NULL,  `category_id` int(11) NOT NULL,  PRIMARY KEY (`category_id`,`option_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `oc_category_option_value` (  `value_id` int(10) NOT NULL AUTO_INCREMENT,  `option_id` int(10) DEFAULT '0',  PRIMARY KEY (`value_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `oc_category_option_value_description` (  `value_id` int(10) NOT NULL DEFAULT '0',  `language_id` int(10) NOT NULL DEFAULT '0',  `option_id` int(10) NOT NULL DEFAULT '0',  `name` varchar(127) DEFAULT NULL,  PRIMARY KEY (`value_id`,`language_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `oc_product_to_value` (  `product_id` int(11) NOT NULL,  `value_id` int(11) NOT NULL DEFAULT '0',  PRIMARY KEY (`product_id`,`value_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  • +1 1
Надіслати
Поділитися на інших сайтах

Сделал чистую установку без префиксов в бд. Опции стали добавляться, однако при заходе в категорию выдает вот такой код

Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in Z:homelocalhostwww24catalogcontrollerproductcategory.php on line 101 and defined in Z:homelocalhostwww24catalogmodelcatalogproduct.php on line 64
Качните еще раз файл Openstore_module_product_filter_1.0_(clean_install).rar, я забыл добавить туда файл category.php, или же сделайте пункт №6 ручной установки.
  • +1 1
Надіслати
Поділитися на інших сайтах

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

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

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

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

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

Вхід

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

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

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

Important Information

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