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

Исправление логики работы стандартного фильтра [Поддержка]


sv2109

Recommended Posts

Исправление логики работы стандартного фильтра


Исправление логики работы стандартного фильтра


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

Лучше объяснить на примере.

Допустим есть фильтры:

Цвет:

- синий

- зеленый

Размер:

- большой

- маленький

Если пользователь выберет напр. "синий", "зеленый" И "большой" то стандартный фильтр OpenCart покажет все товары, у которых есть хотя бы один из фильтров: "синий" ИЛИ "зеленый" ИЛИ "большой"

После установки этой модификации будут отображаться товары, у которых есть фильтры И ("синий" ИЛИ "зеленый") И "большой"

То есть, фильтры из одной группы работают по логике "ИЛИ", стандартно, а фильтры из разных групп по логике "И", что более логично, правильно и удобно для пользователя.

На оф. сайте есть модуль, который делает тоже самое, что и этот:

https://www.opencart.com/index.php?route=extension/extension/info&extension_id=23603

он рабочий, если судить по отзывам, но когда я открыл код этого модуля, то увидел там вот это:

 

// FixFilter

$minq=$this->db->query("

SELECT id.product_id FROM(SELECT

product_id, count(i.product_id) as t, c.filter_group as b

FROM

(SELECT

f.filter_id, f.product_id, p.filter_group_id

FROM

". DB_PREFIX ."product_filter f

left join ". DB_PREFIX ."filter p ON p.filter_id = f.filter_id

where

p.filter_id IN (" . implode(',', $implode) . ")

GROUP BY product_id , filter_group_id) as i,

(select

count(distinct filter_group_id) as filter_group

from

". DB_PREFIX ."filter_description f_b

WHERE f_b.filter_id in (" . implode(',', $implode) . ")) as c

GROUP BY product_id

HAVING t = B) as id");

$min=array();

for($x=0;$xrows);$x++){

foreach($minq->rows[$x] as $value){

$min[]=$value;

}

}

$imp=implode(',',$min);

// FixFilter END

// FixFilter

if(isset($filters)){

if(!count($min)){

$imp='0000000';

}

$sql .= " AND p.product_id IN(".$imp.")";

}

// FixFilter END

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

Поэтому теперь у пользователей есть выбор какое решение использовать.

Модуль тестировался на OpenCart 2.1.0.2, на других версиях - не тестировался, у кого есть возможно - протестируйте.


  • Автор
  • долучення
    30.10.16
  • Категорія
  • Системные требования
  • Метод активации
  • Ioncube Loader
  • ocStore
  • OpenCart.Pro, ocShop
  • Звернення до сервера розробника

 

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

  • 4 weeks later...

Подскажите, пожалуйста. Fix установил, но фильтр продолжает фильтровать, как и ранее.

Версия OcStore 2.1.0.1

В личку могу бросить адрес сайта. 

загрузите ocmod файл модуля, очистите кеш модификаций, проверьте нету ли ошибок в логе ocmod

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

  • 2 weeks later...
  • 2 months later...
  • 9 months later...
  • 7 months later...
  • 1 month later...
  • 1 year later...

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

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

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

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

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

Вхід

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

Вхід зараз

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

Important Information

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