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

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


dotsent

Recommended Posts

  • 2 weeks later...

SooR, так и думал =)

но вернемся к нашим "баранам" - проблема с фильтром в IE.

не работает ни в одной версии из тех, что я проверял

( https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif https://opencartforum.com/viewtopic.php?f=21&t=876&start=60#p7780)

похоже IE напрочь не понимает вот этого:

$('#filters input, #filters select').live('change', function() {
  effects('', 'jump', 'icon', 200);
  //effects('in', 'fade', 'load', 300);
	alert("IE test _live change_"); // нет этого сообщения в IE
	loadContent();
});
пойду потестирую еще.

народ, кто пользуется фильтром, не проходите мимо проблемы :?

UPD:

пока писал сообщение - попутно тестил.

вылечил проблему так:

1. закомментировал приведенный выше код;

2. добавил в вывод каждого элемента (у меня используются только checkbox`ы)

onclick="markFilterOption();"
в итоге получилось так:

мой код корректно работает в:

opera 10.10, iceweasel 3.5.14 (mozilla), gChrome 6.?, IE (7,8 tested)

осталось "пофиксить навигацию".

ибо если нет JS/AJAX (или вдруг сбой какой произошел после AJAX-получения списка категорий/товаров), то при переходе на какую-либо страницу видим "немного" не то, что хотелось бы :D

на этом все.

спасибо всем, кто не ответил - благодаря вам я смог сам найти и побороть проблему...

UPD2

все здорово, фильтр работает во всех браузерах.

только вот значения опций фильтра теперь не передаются :D

а значит битва еще не окончена :?

UPD3

ну йомайо. сколько можно провтыкивать такие моменты... :o

проблема со сбором значений опций фильтра была в том,

что я собирал input`ы с неправильными именами.

переработал код вот так (сугубо под свои нужды):

var $filter_options_fields = $("#filters input:checked").serializeArray();
			jQuery.each($filter_options_fields, function(j, $filter_options_field){
				if ($filter_options_field.name != "parent" && $filter_options_field.name != "subcatID[]") {
				//alert($filter_options_field.name);
					if (j == 0) {
						$filter_options_values += $filter_options_field.value;
					} else if ($filter_options_field.value == '') {
						$filter_options_values += '';
					} else {
						if ($filter_options_values == '') {
							$filter_options_values += $filter_options_field.value;
						} else {
							$filter_options_values += '_' + $filter_options_field.value;
						}
					}
				}
			});
отсюда, вобщем-то, вытекает вопрос:

можно ли как-то так (более "элегантно" ИМХО)

var $fields = $("#filters input[name='value_id[ТУТ_КАКОЕ_ТО_РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ]'], #filters select[name='value_id[ТУТ_КАКОЕ_ТО_РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ]']").serializeArray();
организовать сбор данных input`ов (или каких других элементов) по именам.

ушел в поиски регулярок в JS

afwollis , большая просьба к Вам, подскажите в каких файлах ето все менять.

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


futadmytro, в файле

catalog/view/theme/default/template/module/filter.tpl

Спасибо!!! Работает)

Еще вопрос:

Можно ли реализовать фильтр , чтобы он собирал значение 1 , а потом значение 2 собирал уже с результатов значения 1, сложная выборка -ето чуть не то, или мой фильтр работает криво? Спасибо шаманам ОК ))

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


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

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

При использовании ajax "история" не сохраняется.

Хотя можно сохранить выбранные опции в сессию и покрутить модуль с этой стороны.

Однако опять же - "истории в браузере" не будет. Нужна будет кнопка-ссылка "Назад".

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

у меня от воспоминаний "разбора полетов" стресс начинается :o

поэтому пока что к фильтру не хочется возвращаться.

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

Подскажите, можно ли сделать чтобы фильтр отфильтровывал не сразу при смене параметра, а при нажатии на добавленную кнопку "поиск"?

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

Доброго дня. Прошу помочь понять следующий финт .., установил ocstore 0.1.8. Подвязал дизайн, установил фильтр с нуля. Добавил таблицы в SQL. Через модули установил фильтр, создал условия. Вроде все путем. Вхожу в товары, на вкладке Опции фильтра получаю сообщение Страница не найдена. Страница, которую Вы запрашиваете, не найдена. Если проблема будет повторяться, свяжитесь пожалуйста с администратором.

И что с этим делать ума не приложу .. помогайте други.

Спасибо.

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


Доброго дня. Прошу помочь понять следующий финт .., установил ocstore 0.1.8. Подвязал дизайн, установил фильтр с нуля. Добавил таблицы в SQL. Через модули установил фильтр, создал условия. Вроде все путем. Вхожу в товары, на вкладке Опции фильтра получаю сообщение Страница не найдена. Страница, которую Вы запрашиваете, не найдена. Если проблема будет повторяться, свяжитесь пожалуйста с администратором.

И что с этим делать ума не приложу .. помогайте други.

скрин?

все файлы залили?

все изменения в файлах сделали?

Змінено користувачем afwollis
Надіслати
Поділитися на інших сайтах

Ребят, Доброго дня! Помогите пожалуйста!

Установил, всё нормально, устанавливал вручную, несчитая мелких багов, которые исправятся, всё нормально, но вот странный нюанс, добавил опции фильтра для категории "Портативная техника->Нетбуки", захожу в настройки товара, который находится в этой категории, перехожу во вкладку "Опции фильтра", а мне пишит "Сначала необходимо выбрать категории товара", выбира уже и все категории всёравно одно и тоже пишит. Подскажите пожалуйста.

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


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

Но, великие гуру! Имеется проблема! Ставил на чистую OpenCart "1.4.9.3", всё работает отлично, за исключением одного: в админке не отображается цена в Каталоге товаров. В самом товаре и на сайте всё прекрасно, - цены есть.

Я очень слабо ориентируюсь в php... очевидно, нужно править файл \admin\controller\catalog\product.php ?

post-6653-0-66570100-1300829336_thumb.jpg

product.php

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


У кого-нибудь остался архив для инсталляции "вручную"? Прочитал всю тему дважды, нашел ссылку только на "чистую" инсталляцию.

Если это поможет аццам русского кодинга, у меня есть 200RUR на вэбманях. На пару кружек доброго пива должно хватить.

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


спасибо, заработал.

Если вдруг кому то понадобится, я столкнулся с таким моментом: после установки на чистую систему, добавлении необходимых баз. Все запускается, но в админке есть ошибка в колонке с ценой, ругается на отсутствие переменных в строке 35 и 88 ..файла product_list.tpl.

Я ее исправил добавив в product.php недостающие переменные (по аналогии с рабочей системой без этого модуля).

При необходимости могу выложить файл с исправлениями.

Еще раз, всем спасибо за оперативный ответ.

Ошибку в 35 строке исправить удалось(добавил в 357 строке
$this->data['column_price'] = $this->language->get('column_price');
, и 413
$this->data['sort_price'] = HTTPS_SERVER . 'index.php?route=catalog/product&token=' . $this->session->data['token'] . '&sort=p.price' . $url;
), а вот с 88
$product['price'];
разобраться не могу...
Надіслати
Поділитися на інших сайтах


а вот с 88 разобраться не могу...

С помощью юзера AndreyN проблема частично решена. Большое ему человеческое спасибо. Теперь сайт отображает в админке цены, но поиск по цене не работает. Если кому-то актуально, напишу.

Однако, уважаемые знатоки, - обнаружилась ещё следующая проблема: Модуль "[webme]_CategoryAtHomepage_v.0.3", который до установки "фильтра категорий" выводил на главной товары из избранных категорий, отказывается показывать товары. Видны лишь названия категорий. Также, вылезают ошибки: "Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in /home/t/technik2ru/public_html/catalog/controller/module/webme_categories_at_homepage.php on line 33 and defined in /home/t/technik2ru/public_html/catalog/model/catalog/product.php on line 64"

Очевидно, проблема в отсутствии второго аргумента для getTotalProductsByCategoryId. Если подставить туда пустое поле, то картина повторяется, но ошибки не выдаются. Как исправить?

post-6653-0-95969800-1300872968_thumb.jpg

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


С помощью юзера AndreyN проблема частично решена. Большое ему человеческое спасибо. Теперь сайт отображает в админке цены, но поиск по цене не работает. Если кому-то актуально, напишу.

Однако, уважаемые знатоки, - обнаружилась ещё следующая проблема: Модуль "[webme]_CategoryAtHomepage_v.0.3", который до установки "фильтра категорий" выводил на главной товары из избранных категорий, отказывается показывать товары. Видны лишь названия категорий. Также, вылезают ошибки: "Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in /home/t/technik2ru/public_html/catalog/controller/module/webme_categories_at_homepage.php on line 33 and defined in /home/t/technik2ru/public_html/catalog/model/catalog/product.php on line 64"

Очевидно, проблема в отсутствии второго аргумента для getTotalProductsByCategoryId. Если подставить туда пустое поле, то картина повторяется, но ошибки не выдаются. Как исправить?

Актуально, хотя бы потому что место экономит в админке (я с ценами через экспорт/импорт работаю)

Всёже как избавится от

Notice: Undefined index: special in /.../admin/view/template/catalog/product_list.tpl on line 85 Notice: Undefined index: price in /.../admin/view/template/catalog/product_list.tpl on line 88
в списке товаров в админке?
Надіслати
Поділитися на інших сайтах


lvovich, я конечно понимаю, что вы мучаете фильтр, но проблемы с другими модулями надо решать в их темах...

Определенная категория на главной

мыши плакали, кололись, но продолжали грызть кактус...

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

надо решать в их темах...

Прошу прощения.

2 roma4891

В общем, душа успокоилась вот чем:

Открываем admin/controller/catalog/product.php

Находим строку:

'quantity'   => $result['quantity'],
Выше добавляем:

'price'	=> $result['price'],

Находим (триста какая-то строка):

$this->data['products'][] = array(
Добавляем перед этой строчкой вот это:

$product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']);

			 if ($product_specials) {
                $special = reset($product_specials);
                if($special['date_start'] > date('Y-m-d') || $special['date_end'] < date('Y-m-d')) {
                    $special = FALSE;
                }
            } else {
                $special = FALSE;
            }

Затем по всему файлу ищем строки с "filter_model" и по аналогии вставляем после них то же самое, но с "filter_price".

Сохраняем.

Теперь открываем admin/view/template/catalog/product_list.tpl

Ищем строку:

<?php echo $$product_info['price']; ?>
Меняем на:

<?php echo $product['price']; ?>

Вот такой квест... вроде, ничего не забыл. Теперь всё, кроме поиска по цене, работает.

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


Прошу прощения.

2 roma4891

В общем, душа успокоилась вот чем:

Открываем admin/controller/catalog/product.php

Находим строку:

'quantity'   => $result['quantity'],
Выше добавляем:

'price'	=> $result['price'],

Находим (триста какая-то строка):

$this->data['products'][] = array(
Добавляем перед этой строчкой вот это:

$product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']);

			 if ($product_specials) {
                $special = reset($product_specials);
                if($special['date_start'] > date('Y-m-d') || $special['date_end'] < date('Y-m-d')) {
                    $special = FALSE;
                }
            } else {
                $special = FALSE;
            }

Затем по всему файлу ищем строки с "filter_model" и по аналогии вставляем после них то же самое, но с "filter_price".

Сохраняем.

Теперь открываем admin/view/template/catalog/product_list.tpl

Ищем строку:

<?php echo $$product_info['price']; ?>
Меняем на:

<?php echo $product['price']; ?>

Вот такой квест... вроде, ничего не забыл. Теперь всё, кроме поиска по цене, работает.

Огромное спасибо, правда лучше всё делать вручную(удалось настроить пошагово), меньше боков вылазит, кстати удалось сделать более менее нормальную сборку для ручной установки, сейчас тестирую - потом выложу, если автор против не будет.

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


Как и обещал сделал ручную сборку с мануалом по установке и с учётом большинства изменений(сразу,у меня 0.1.8), из того что помню:

- устранена проблема с IE (пост #72, 4 стр. afwollis);

- добавлено в админке checkbox "Выбрать все" для выбора всех категорий (спасибо berikiushi);

- назначение товару нескольких свойств (спасибо afwollis - пост #53) при редактировании товара;

- логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара (спасибо afwollis - пост #79)

- ... может чтото ещё...непомню (собирал ночью)

Начнём,

1) Делаем запрос в базу данных(у меня ПРЕФИКС oc_):

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;

2) В файле admin|view|template|catalog|product_form.tpl

После

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

<a tab="#tab_filter">Опции фильтра</a>

Далее после блока

<div id="tab_general"></div>
, примерно 59 строка, перед
<div id="tab_data">
Вставляем

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

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

<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) Открываем файл admin|model|catalog|product.php

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

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 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) Открываем admin|controller|catalog|product.php

в районе 1100 строки, после

foreach($results as $option) {
          $this->data['category_options'][] = array(
Должно быть(если нет вставляем!)

'option_id' => $option['option_id'],
в итоге должно быть:

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'])
          );
        }
и идем в конец файла, до закрытия класса вставляем

// 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) Открываем catalog|model|catalog|product.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) {
До блока 17 строка

$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 product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")";
                }
                */
                if (isset($values) && $values != '') {
                                $data = array();
                                
                                $values_without_underline = "";
                                $values_for_IN = "";
                                foreach (explode('_', $values) as $value_id) {
                                        if (empty($values_for_IN)) {
                                                $values_for_IN = "'".$value_id."'";
                                        } else {
                                                $values_for_IN .= ", '".$value_id."'";
                                        }
                                        $values_without_underline .= $value_id;
                                }
                                
                                // http://forums.mysql.com/read.php?78,354483,354598#msg-354598
                                //(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25';
                                $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM oc_product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'";
                        }
        // End filter
Заменяем весь метод public function getTotalProductsByCategoryId (теперь гдето с 84 по 85 строку)

На

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) . ")";
                }
                */
                if (isset($values) && $values != '') {
                                $data = array();
                                
                                $values_without_underline = "";
                                $values_for_IN = "";
                                foreach (explode('_', $values) as $value_id) {
                                        if (empty($values_for_IN)) {
                                                $values_for_IN = "'".$value_id."'";
                                        } else {
                                                $values_for_IN .= ", '".$value_id."'";
                                        }
                                        $values_without_underline .= $value_id;
                                }
                                
                                // http://forums.mysql.com/read.php?78,354483,354598#msg-354598
                                //(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25';
                                $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM oc_product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'";
                        }
    // End filter

    $query = $this->db->query($sql);

		return $query->row['total'];
	}
Сохраняем, закрываем.

6) Открываем catalog|controller|product|category.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) Качаем архив manual_Openstore_module_product.zip и извлекаем в корень сайта с заменой.

8) Идем в админку -> дополнения и включаем фильтр, добавляем опции.

manual_Openstore_module_product.zip

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


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

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

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

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

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

Вхід

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

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

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

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

Important Information

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