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

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

sv2109 ★★★★★ 7 відгуків 791 завантажень 13 754 24.06.24
1.0 Ioncube Loader: Ні
Безкоштовно
OpenCart2.3, 2.2, 2.1, 2.0
ocStore2.3.0.2.4, 2.3, 2.2, 2.1
Тип ліцензії
Метод активаціїБез активації
Ioncube LoaderНі
Звернення до сервера розробникаНі
Завантаження791
Опубліковано30.10.16
Оновлене24.06.24
Розмір файлу1 КБ

Відгуки користувачів

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

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

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

Цвет:

- синий

- зеленый

Размер:

- большой

- маленький

Если пользователь выберет напр. "синий", "зеленый" И "большой" то стандартный фильтр 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, на других версиях - не тестировался, у кого есть возможно - протестируйте.

Характеристики

Метод активаціїБез активації
Ioncube LoaderНі
В продажеДа
OpenCart2.3, 2.2, 2.1, 2.0
ocStore2.3.0.2.4, 2.3, 2.2, 2.1
OpenCart.Pro, ocShopOpencart.pro 2.3, Opencart.pro 2.1, OcShop 2.0.3.х
Звернення до сервера розробникаНі
Якщо сервер розробника недоступнийДополнение работает
ЗнижкаНі
Сумісно з шаблонами-
ЛокалізаціяУкраїнська, Англійська, Російська
Версія1.0
Розмір файлу1 КБ
Опубліковано30.10.16
Оновлене24.06.24
  • +1 2

Інші розширення sv2109


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

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

Important Information

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